浅谈synchronized作用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈synchronized作用相关的知识,希望对你有一定的参考价值。
在开辟多个线程时候,synchronized将会发挥它的作用,下面写个测试Demo进行观察它的作用:
FirstThread runnThread = new FirstThread();
Thread thread1 = new Thread(runnThread);
Thread thread2 = new Thread(runnThread);
thread1.setName("线程A");
thread2.setName("线程B");
thread1.start();
thread2.start();
public static class FirstThread implements Runnable{
@Override
public void run() {
//synchronized (this) {
for (int i = 10; i > 0; i--) {
System.out.println(Thread.currentThread().getName()+i);
//}
}
}
}
这是在进程里开启了两个线程,并且开启子线程的程序是同一个的。运行程序显示结果:
线程B10
线程A10
线程B9
线程A9
线程B8
线程A8
线程B7
线程A7
线程B6
线程B5
线程B4
线程B3
线程B2
线程B1
线程A6
线程A5
线程A4
线程A3
线程A2
线程A1
可以看到即便线程B或者A运行时候,仍然会有另外一个线程抢占起来,占领线程,两个线程互相争抢。
但是加上synchronized (this) {}这句话同步锁,运行结果:
线程A10
线程A9
线程A8
线程A7
线程A6
线程A5
线程A4
线程A3
线程A2
线程A1
线程B10
线程B9
线程B8
线程B7
线程B6
线程B5
线程B4
线程B3
线程B2
线程B1
可以发现是一个线程的程序运行完才能运行下一个线程,即便在线程A运行时候线程B已经可以运行了,但是由于同步锁的作用是运行中的线程运行结束之后才能其它线程,避免了线程互扰的情况。
以上是关于浅谈synchronized作用的主要内容,如果未能解决你的问题,请参考以下文章
深入研究 Java Synchronize 和 Lock 的区别与用法