public class TextThread { public static void main(String[] args) { TxtThread tt = new TxtThread(); new Thread(tt).start(); new Thread(tt).start(); try { Thread.sleep(1000); }catch (Exception e) { e.getMessage(); } } }
class TxtThread implements Runnable { int num = 10; String str = new String(); public void run() { synchronized (str) { while (num > 0) { try { Thread.sleep(1); }catch (Exception e) { e.getMessage(); } System.out.println(Thread.currentThread().getName() + "this is " + num--); } } } }
@pwrliang 感谢指教,这里忽略了 num 是被两个线程共享的,第一个线程已经把 num 减为 0,第二个线程的循环条件就不成立了。另外,你提到的对 num 的操作会造成 race condition,这个竞争应该不会发生吧?因为 synchronized 已经保证了只有一个线程能访问到这块代码,即只有一个线程可以操作到成员变量 num,所以在 synchronized 的保护下,应该不会存在 num 上的竞争吧。不知道理解的对不对,还望指教。
第 1 页 / 共 1 页
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。