已有101人关注
多线程同步块的问题
发表在Java图书答疑 2019-07-25 《Java从入门到精通(第4版)》第18章 多线程
是否精华
版块置顶:

源代码如下:

public class ThreadTest extends Thread {
 private static int COUNT=10;
 private static int I=0;
 private String name;
 public ThreadTest(String name) {
  this.name=name;
 }
 public static void main(String[] args) throws Exception {
  new ThreadTest("线程A").start();
  new ThreadTest("线程B").start();
  new ThreadTest("线程C").start();
 }
 @Override
 public void run() {
  while (COUNT>0) {
   synchronized (this) {
    try {
     COUNT--;
     I++;
     System.out.println(I+". "+name+"售出一张票,还剩"+COUNT+"张票");
     Thread.sleep(200);
    } catch (Exception e) {
     e.printStackTrace();
    }
   }
  }
 }
}


输出结果:

2. 线程A售出一张票,还剩8张票
2. 线程B售出一张票,还剩8张票
3. 线程C售出一张票,还剩7张票
5. 线程C售出一张票,还剩5张票
4. 线程A售出一张票,还剩5张票
4. 线程B售出一张票,还剩5张票
6. 线程C售出一张票,还剩3张票
7. 线程A售出一张票,还剩3张票
6. 线程B售出一张票,还剩3张票
8. 线程C售出一张票,还剩1张票
8. 线程A售出一张票,还剩1张票
9. 线程B售出一张票,还剩1张票
10. 线程B售出一张票,还剩0张票


为什么同步块没起作用呢?问题出在哪?

分享到:
精彩评论 1
根号申
学分:4736 LV12
TA的每日心情
2021-07-16 23:48:46
2019-07-26
沙发

因为你创建了三个完全独立的线程,执行三个完全独立的run方法,同步块只锁线程对象自身,并不会锁住其他线程。

首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照