具体回答,请看注释- class thread implements Runnable
- {
- public void run()
- {
- System.out.println(Thread.currentThread().getName()+"进来了");
- /*回答楼主,虽然上面的语句会输出:
- * Thread-0进来了
- * Thread-1进来了
- * 但是真正执行下面的语句的时候,有可能是 Thread-1(或者Thread-0)带着锁"Demo.class"在锁内运行,即使sleep也是在同步代码块内部sleep
- * 另一个Thread-0(或者Thread-1)其实并没有进入锁内,因此另一个线程并没有进入同步代码块当中
- * 所以得出的结论是:只有Thread-1(或者Thread-0)进入循环内部,而另一个并没有进行执行,而是在同步代码块外部进行等待.
- */
- synchronized(Demo.class)
- {
- try{Thread.currentThread().sleep(1000);}
- catch(Exception e){}
- while(true)
- System.out.println("我是"+Thread.currentThread().getName());
- }
- }
- }
- class Demo
- {
- public static void main(String args[])
- {
- thread thr=new thread();
- new Thread(thr).start();//其为 Thread-0线程
- new Thread(thr).start();//其为Thread-1线程
- }
- }
复制代码 |