Java中執行緒安全(synchronized)
阿新 • • 發佈:2019-01-27
package tk.javazhangwei.thread.syn; /*** * 執行緒安全問題 * * @author zw * */ public class SynDemo01 { public static void main(String[] args) { Web12306 web = new Web12306(); Thread th = new Thread(web, "黃牛"); Thread th1 = new Thread(web, "農民工"); Thread th2 = new Thread(web, "學生"); Thread th3 = new Thread(web, "商人"); th.start(); th1.start(); th2.start(); th3.start(); } } class Web12306 implements Runnable { private int num = 10; private boolean f = true; @Override public void run() { while (f) { test1(); } } //同步塊 public void test1() { synchronized (this) { if (num <= 0) { f = false; return; } try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ",恭喜您,搶到票了,編號為:" + num--); } } //同步方法 public synchronized void test() { if (num <= 0) { f = false; return; } try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ",恭喜您,搶到票了,編號為:" + num--); } }