淺談Java多線程
Java中多線程涉及下面4點
- 創建單線程:繼承Tread類 和 實現Rannable接口;
- 多線程使用:手動實例化多個線程 或者 使用線程池 ExecutorService;
- 多線程共享數據同步:可以采用同步synchronized執行run方法中的操作;
- 合理使用多線程同步數據,防止死鎖問題。 </ol>
- 繼承Tread類
public class MyThread extends Thread { public void run() { System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) { //不能共享數據 //MyThread myThread = new MyThread(); //能共享數據 Thread myThread = new Thread(new MyThread()); myThread.start(); } }
-
實現Rannable接口
public class MyThread implements Runnable { public void run() { System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) { //能共享數據 Thread myThread = new Thread(new MyThread()); myThread.start(); } }
上面寫了兩種創建線程的例子,注意:注釋內容。 - 手動實例化自定義的線程類
public class MyThread implements Runnable { public void run() { System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) { MyThread myThread = new MyThread(); new Thread(myThread).start(); new Thread(myThread).start(); new Thread(myThread).start(); } }
-
使用線程池 ExecutorService
public class MyThread implements Runnable { public void run() { System.out.println(Thread.currentThread().getName()); } public static void main(String[] args) { ExecutorService pool = Executors.newCachedThreadPool(); MyThread myThread = new MyThread(); for(int i = 0; i < 3; i++){ pool.execute(myThread); } //關閉線程池 pool.shutdown(); } }
1.創建線程
2.多線程使用
3.多線程共享數據同步
一個簡單賣票代碼:3個賣票員,共賣100張門票,買一張票耗時100毫秒。import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class MyThread implements Runnable { private int tickets = 100; private synchronized void sale() { if (tickets > 0) { System.out.println(Thread.currentThread().getName() + " 剩余:" + (--tickets) + "張票"); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } else{ Thread.currentThread().stop(); } } public void run() { while(true){ sale(); } } public static void main(String[] args) { ExecutorService pool = Executors.newCachedThreadPool(); MyThread myThread = new MyThread(); for (int i = 0; i < 3; i++) { pool.execute(myThread); } pool.shutdown(); } }
4.死鎖
當線程之間互相等待共享資源時,會產生死鎖問題。我們可以在多線程的程序中減少同步關鍵字的使用,減少每一次占用資源的時間之類的措施來降低死鎖出現的可能性。
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!