以上这段程序中的 i 变量并不是共享数据也就是这里的Synchronized关键字并未起作用因为tt两个线程是两个对象(rr)的线程不同的对象其数据是不同的所以r和r两个对象的i变量是并不是共享数据
当把代码改成如下Synchronized关键字才会起作用
以下是引用片段
Runnable r = new ThreadTest();
Thread t = new Thread(r);
Thread t = new Thread(r);
tstart();
tstart();
三sleep()
使当前线程(即调用该方法的线程)暂停执行一段时间让其他线程有机会继续执行但它并不释放对象锁也就是如果有Synchronized同步块其他线程仍然不同访问共享数据注意该方法要捕获异常
比如有两个线程同时执行(没有Synchronized)一个线程优先级为MAX_PRIORITY另一个为MIN_PRIORITY如果没有Sleep()方法只有高优先级的线程执行完成后低优先级的线程才能执行;但当高优先级的线程sleep()后低优先级就有机会执行了
总之sleep()可以使低优先级的线程得到执行的机会当然也可以让同优先级高优先级的线程有执行的机会
四join()
join()方法使调用该方法的线程在此之前执行完毕也就是等待调用该方法的线程执行完毕后再往下继续执行注意该方法也要捕获异常
[] [] []