java中實現多線程
1)繼承Thread,重寫里面的run方法
2)實現runnable接口
通過源碼發現:
第一種方法說是繼承Tread然后重寫run方法,通過查看run方法的源碼,發現run方法里面調用是runnable接口中抽象的run()方法。
既然這樣不如直接使用第二種方法,使用第二種方法,第一 java沒有單繼承的限制,第二 還可以隔離代碼
言歸正傳下面是第二種方法的demo
1.處理業務代碼
1 //根據傳參打印對應的名字 2 private void printName(String name) throws Exception{ 3 System.out.println(name); 4 }
2.創建內部類實現Runnable接口
1 private class PrintName implements Runnable{ 2 private String name; 3 4 public PrintName(String name){ 5 this.name = name; 6 } 7 8 //Runnable接口中的抽象方法 9 @Override 10 public void run(){ 11 try { 12 printName(name); 13 }catch (Exception e){ 14 System.out.println(e); 15 } 16 17 } 18 }
3. 創建線程對象並執行線程
1 private void createThead() throws Exception { 2 String name = "hello world"; 3 Thread thread = new Thread(new PrintName(name)); 4 thread.start(); 5 }
現在附上全部代碼:
1 package com.ieou.demo.controller; 2 3 import org.springframework.web.bind.annotation.GetMapping; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.bind.annotation.RestController; 6 7 @RestController 8 @RequestMapping("/") 9 public class Demo1Controller { 10 11 12 /** java 多線程 異步實現demo */ 13 14 //第一步 處理業務代碼 15 //根據傳參打印對應的名字 16 private void printName(String name) throws Exception{ 17 System.out.println(name); 18 } 19 20 //創建內部類實現Runnable接口 21 private class PrintName implements Runnable{ 22 private String name; 23 24 public PrintName(String name){ 25 this.name = name; 26 } 27 28 //Runnable接口中的抽象方法 29 @Override 30 public void run(){ 31 try { 32 printName(name); 33 }catch (Exception e){ 34 System.out.println(e); 35 } 36 37 } 38 } 39 40 //第三部 創建線程對象 41 private void createThead() throws Exception { 42 String name = "hello world"; 43 Thread thread = new Thread(new PrintName(name)); 44 thread.start(); 45 } 46 47 @GetMapping("/name") 48 public String findName() throws Exception{ 49 System.out.println("name1"); 50 createThead(); 51 System.out.println("name3"); 52 return "1"; 53 }
執行結果: