首页 > 其他 > 详细

浅谈synchronized作用

时间:2017-06-28 22:15:51      阅读:261      评论:0      收藏:0      [点我收藏+]

  在开辟多个线程时候,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作用

原文:http://www.cnblogs.com/zpfwin/p/7091870.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!