二、java實現多執行緒的方式?
阿新 • • 發佈:2019-08-12
一、同步?非同步?
下面兩幅圖解釋了同步非同步。
二、實現多執行緒的方式
1.繼承Thread
package threaddemo; class CreateThreadDemo extends Thread{ /** * 執行緒執行的任務,執行的程式碼 */ @Override public void run() { for (int i = 0; i <30 ; i++) { System.out.println("我是執行緒:"+i+ "名字:"+Thread.currentThread().getName()); } } } /** * @version V1.0 * @description:實現執行緒的方式 * @author: BingShu * @contact: wx:hsj179540 * @date: 2019年-08月-11日-23 */ public class ThreadDemo { /** * 什麼是程序?什麼是執行緒? * 多執行緒的應用場景? * 多執行緒的優點? * java實現多執行緒的方式? * 1.整合Thread類重寫run方法 */ public static void main(String[] args) { CreateThreadDemo createThreadDemo=new CreateThreadDemo(); createThreadDemo.start(); for (int i = 0; i <30 ; i++) { System.out.println("我是執行緒:"+i+ "名字:"+Thread.currentThread().getName()); } } }
2.實現runable介面(推薦)
package threaddemo; class CreateThreadDemo2 implements Runnable { /** * 執行執行緒程式碼 */ @Override public void run() { for (int i = 0; i < 30; i++) { System.out.println("我是執行緒:" + i + "名字:" + Thread.currentThread().getName()); } } } /** * @version V1.0 * @description: * @author: BingShu * @contact: wx:hsj179540 * @date: 2019年-08月-11日-23 */ public class ThreadDemo2 { public static void main(String[] args) { CreateThreadDemo2 createThreadDemo2=new CreateThreadDemo2(); new Thread(createThreadDemo2).start(); for (int i = 0; i <30 ; i++) { System.out.println("我是執行緒:"+i+ "名字:"+Thread.currentThread().getName()); } } }
3.使用內部類實現
package threaddemo; /** * @version V1.0 * @description:使用內部類實現 * @author: BingShu * @contact: wx:hsj179540 * @date: 2019年-08月-11日-23 */ public class ThreadDemo3 { public static void main(String[] args) { Thread thread=new Thread(new Runnable() { @Override public void run() { for (int i = 0; i <30 ; i++) { System.out.println("我是執行緒:"+i+ "名字:"+Thread.currentThread().getName()); } } }); thread.start(); for (int i = 0; i <30 ; i++) { System.out.println("我是執行緒:"+i+ "名字:"+Thread.currentThread().getName()); } } }
三、內部類的使用(補充)
package threaddemo; abstract class Panret { //內部類 abstract void add(); } /** * @version V1.0 * @description:內部類的使用 * @author: BingShu * @contact: wx:hsj179540 * @date: 2019年-08月-11日-23 */ public class InternalClass { public static void main(String[] args) { Panret p = new Panret() { @Override void add() { System.out.println("我是內部類"); } }; //方法呼叫 p.add(); } }
四、常用api的使用
package threaddemo; /** * 常用api * getId() 獲取執行緒Id * getName(); // 獲取執行緒名字 * stop(); //停止 * Thread.sleep(long value); 休眠 */ class CreateThreadApiUse implements Runnable { @Override public void run() { for (int i = 0; i < 30; i++) { System.out.println("執行緒id:" + Thread.currentThread().getId() + " 執行緒Name:" + Thread.currentThread().getName()); if(i==5){ //不安全不建議大家使用 Thread.currentThread().stop(); } } } } /** * @version V1.0 * @description: * @author: BingShu * @contact: wx:hsj179540 * @date: 2019年-08月-11日-23 */ public class ThreadApi { public static void main(String[] args) { CreateThreadApiUse createThreadApiUse = new CreateThreadApiUse(); //自定義執行緒名字 Thread thread = new Thread(createThreadApiUse,"我是執行緒的名字"); thread.start(); try { //休眠 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); System.out.println("執行緒異常"); } } }
總結:
1.同步非同步?
2.多執行緒常用的實現方式?(實現Runable方式推薦,原因:java面向介面程式設計,實現介面可以多繼承,但是直接繼承Thread將無法繼承 其他的類。)
還有其他方式實現多執行緒?請自行科普。
3.內部類的使用?
4.Thread常用api
有問題歡迎諮詢,或者加入我的群:微信 :hsj17