A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© TS__likewise 中级黑马   /  2014-6-18 21:42  /  589 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class ThreadDemo {         
        public static void main(String[] args)
        {            TestThread t = new TestThread();            
        new Thread(t).start();            
        new Thread(t).start();            
        new Thread(t).start();            
        new Thread(t).start();        
        }   
        }
        class TestThread implements Runnable {        
                int tickets = 100;        
                public void run() {            
                        String str = "";           
                        while(true)
                                {                 
                                synchronized(str)
                                        {                    
                                        if(tickets<=0)                        
                                                break;                     
                                                            
                                        System.out.println(Thread.currentThread().getName()
                                        + " is saling " + tickets--);               
                                        }
                        }        
        }   
        }
这么做不对吗,为什么不能实现各自的同步

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

3 个回复

倒序浏览
楼主,刚刚测试了一下你的程序,没得问题,你可能觉得同步不明显,你可以把 int tickets = 100;改成 int tickets = 10000,;  这时你可以看到4个线程都能执行到,因为cpu多个线程上快速切换执行,数值小了效果不明显

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
TestThread t1 = new TestThread();     
TestThread t2 = new TestThread();     
TestThread t3 = new TestThread();     
TestThread t4 = new TestThread();            
        new Thread(t1).start();            
        new Thread(t2).start();            
        new Thread(t3).start();            
        new Thread(t4).start();
回复 使用道具 举报
keep_moving 发表于 2014-6-19 11:38
楼主,刚刚测试了一下你的程序,没得问题,你可能觉得同步不明显,你可以把 int tickets = 100;改成 int t ...

程序可以运行,同步不对,不是不明显
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马