黑马程序员技术交流社区

标题: 为什么每次只能执行一条线程呢? [打印本页]

作者: 李能甫    时间: 2015-4-1 12:10
标题: 为什么每次只能执行一条线程呢?
public class Test2 {

        /**
         * @param args
         */
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                //Tese1 tes=new Tese1();
                //tes.start();
        //tes.run();
                Tese2 ts2=new Tese2();
                Thread t=new Thread(ts2);
                Thread t1=new Thread(ts2);
                Thread t2=new Thread(ts2);
                Thread t3=new Thread(ts2);
                t.start();
                t1.start();
                t2.start();
                t3.start();
               

        }

}
class Tese2 implements Runnable{
    private int num=100;
        @Override
        public synchronized void run() {
                // TODO Auto-generated method stub
                Object obj=new Object();
                while (true) {
                        synchronized (obj) {
                                if (num>0) {
                                        try {
                                                Thread.sleep(10);
                                        } catch (Exception e) {
                                                // TODO: handle exception
                                        }
                                        System.out.println(Thread.currentThread().getName()+"--"+num--);
                                }
                               
                                }
                        }
               
                }
        }
        就是不怎么明白,这段代码的执行原理,只是照着敲了一遍。


作者: 林吉前    时间: 2015-4-1 12:14
{:2_35:}Synchronized() 是一个锁,就像你家的门一样 就一把锁 在你手里 你就是那个拿着锁的线程  你拿着锁 开门进家了 外面的人没有锁怎么进去?  你进家里洗了澡出去了 把锁给别人 跟别人说 我洗好了 到你了 锁的钥匙给你 你进去  然后另一个人就进去了 门又关上了 或者你出来后还想再洗一次 那你就有进去把们关上了
作者: 王小乖    时间: 2015-4-1 12:15
因为存在synchronized,在synchronized代码块中的语句,只能进去一个线程执行,只要进去的线程执行不完,别的线程就不能进去执行
作者: 林吉前    时间: 2015-4-1 12:16
林吉前 发表于 2015-4-1 12:14
Synchronized() 是一个锁,就像你家的门一样 就一把锁 在你手里 你就是那个拿着锁的线程  你拿着锁 ...

{:2_35:}就是那么个意思了 锁跟钥匙有点分不清 理解成反锁门好了 那种进去就有个插销的洗手间? 去过吧 公共厕所 进去以后到里面把们反锁上 上好厕所 把插销一拔又出来了 然后别人才可以上 或者你自己还想再上一次 又进去把插销插上。。。别人又进不去了 只能在外面等着
作者: tubao1991    时间: 2015-4-1 13:38
呵呵!楼上说的都对!Synchronized所定义的为同步代码块,理解“同步”就是一个一个来。
作者: lrd7512369    时间: 2015-4-1 14:30
同步了啊,为了防止共享数据出错,实现同步的方法就是一条一条的执行线程,这也是它的局限性




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2