本帖最后由 刘海芳 于 2013-6-8 11:39 编辑
num++==20是先比较,在自加。。
第一种方式:线程一num=20时,执行到到if(num==20) 会执行return方法,程序执行结束,num=20,所以是使用的同一个对象t,此时thread1执行,线程2进入,一进来就发现num=20,也会执行return方法,程序执行结束。
第2中方式:当num=20,执行if(num++==20),是先比较num==20,然后再加++,发现num=20,执行return
,线程程序结束,执行的num=21,线程2进入是num=21,所以就不会执行return,一直循环。。- package itheima.test;
- //但是如下方式就不行:
- class Test implements Runnable
- {
- int num=0;
- public synchronized void run()
- {
- while(num<=20)//把这个条件改下就可以,当然逻辑就乱了
- {
-
- if(num++==20)
- return;//不可以把子线程完全控制住,使其终止!!郁闷!!!!求大神!!!。
- System.out.println(Thread.currentThread().getName()+"//"+num);
- }
- }
- }
- public class Demo
- {
- public static void main(String[] args)
- {
- Test t=new Test();
- new Thread(t).start();
- new Thread(t).start();
- }
- }
复制代码 |