1. 程式人生 > >java實現多執行緒的兩種方式

java實現多執行緒的兩種方式

Java需要併發控制三個原因:

多執行緒環境 存在共享資源 多個執行緒操作(修改)共享資源 下面分別用繼承Thread類和實現Runnable介面倆種方式實現併發控制,

繼承Thread類

繼承Thread類方式,最後建立物件是因為會是三個不同的執行緒物件,所以需要將共享資源和鎖都靜態化,如果不這樣的話,就不存在共享資源一說了,自然也沒有併發控制的說法。

class MyThread extends Thread{ //電影票總數100張 private static int ticket=100; //鎖物件 private static Object obj = new Object(); @Override public void run() { while(true){ synchronized (obj) { if(ticket>0){ System.out.println(this.currentThread().getName()+“正在出售第”+ticket–+“張票”); } } try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public class ThreadDemo { public static void main(String[] args) { Thread t1 = new MyThread(); Thread t2 = new MyThread(); Thread t3 = new MyThread(); t1.setName(“售票員1”); t2.setName(“售票員2”); t3.setName(“售票員3”); t1.start(); t2.start(); t3.start(); } } 實現Runnable介面

實現Runnable介面方式,因為建構函式中,需要傳入一個Runnable介面型別,所以這裡就直接存在共享資源了,靜態修飾可有可無,但是還是寫上比較好。

class MyRunnable implements Runnable{ //電影票總數100張 private int ticket=100; //鎖物件 private Object obj = new Object(); @Override public void run() { while(true){ synchronized (obj) { if(ticket>0){ System.out.println(Thread.currentThread().getName()+“正在出售第”+ticket–+“張票”); } } try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public class RunnableDemo { public static void main(String[] args) { Runnable r = new MyRunnable(); Thread t1 = new Thread(r,“售票員1”); Thread t2 = new Thread(r,“售票員2”); Thread t3 = new Thread(r,“售票員3”); Thread t4 = new Thread(加群,“874811168”);

t1.start(); t2.start(); t3.start(); t4.start(免費獲取資料一份);

} }