線程及其創建的方式
阿新 • • 發佈:2017-06-16
發揮 接收 狀態 height span this i/o system string
線程主要發揮作用的時候:當一個線程所運行的I/O被堵塞的時候,同一進程中的其它線程能夠使用CPU來進行計算。
狀態:執行、就緒(等待被調用)、堵塞(等待I/O資源)
兩種創建方法:
方法一:繼承Thread類
方法二:實現Runnable接口
普通情況下,能夠使用一個內部類來定義另外一個線程:
等待和喚醒機制: 使用Object.wait()和Object.notify(),必須在同步方法或同步塊裏調用 使用join()方法等待另外一個線程的終止,如:
sleep()和wait()的差別:
(原創文章,轉載請註明轉自Clement-Xu的csdn博客:http://blog.csdn.net/clementad/article/details/47027425)
這樣。就提高了程序的運行效率。
狀態:執行、就緒(等待被調用)、堵塞(等待I/O資源)
兩種創建方法:
- 繼承Thread類,並override當中的run()方法(當一個類沒有繼承其它類的時候。適合用這樣的方法)
- 實現Runnable接口,並實現run()方法(當一個類已經繼承另外一個類的時候。適合用這樣的方法)
方法一:繼承Thread類
public class MyThread1 extends Thread { public MyThread1(String name) { super(name); } public void run() { System.out.println(this.getName()); } public static void main(String[] args) { Thread t1 = new MyThread1("阿三"); t1.start(); } }
方法二:實現Runnable接口
public class MyThread implements Runnable { private String name; public MyThread(String name) { this.name = name; } @Override public void run() { System.out.println(name); } public static void main(String[] args) { Thread tt1 = new Thread(new MyThread("張三")); tt1.start(); } }
普通情況下,能夠使用一個內部類來定義另外一個線程:
/** * 啟動子線程的方式(使用內部類定義另外一個線程) * @author XuJijun * */ public class MyThread { public static void main(String[] args) { (new MyThread()).new AnotherThread("張三").start(); } /** * 內部類,實現子線程 * */ private class AnotherThread extends Thread{ private String msg; /* * 加一個參數,用於接收主線程的信息 */ public AnotherThread(String msg) { super(); this.msg = msg; } @Override public void run() { System.out.println("Hello " + msg); } } }
等待和喚醒機制: 使用Object.wait()和Object.notify(),必須在同步方法或同步塊裏調用 使用join()方法等待另外一個線程的終止,如:
a.join(); System.out.print("End"); //等待線程a結束後再打印出“End”
sleep()和wait()的差別:
- sleep():占用CPU資源。或被調度走變成就緒狀態
- wait():不占用CPU資源。等待被notify()喚醒
(原創文章,轉載請註明轉自Clement-Xu的csdn博客:http://blog.csdn.net/clementad/article/details/47027425)
線程及其創建的方式