執行緒的建立方式
總結多執行緒的建立方式,多執行緒的實作一共四種方法,接下來將詳談一下建立的方式
#1、繼承Thread類,而後覆寫run()方法
2、實作Runnable接口,而後覆寫run()方法
3、實作callable接口,而後覆寫calldaed541be57f7e1197efbbe903a12eec方法
4、線程池(後面專門說,因為較複雜)
注意:無論使用哪種方式創建線程,啟動線程一律使用Thread類別提供的start ()方法。
1.繼承Thread類別覆寫run方法
#class MyThread extends Thread { private String title; private int ticket = 20; public MyThread(String title) { this.title = title; } public void run() { //放每个线程的子任务 while (ticket > 0) { System.out.println("当前线程为"+title+",还剩下"+ticket--+"票"); } } } public class ThreadTest { public static void main(String[] args) { MyThread myThread1 = new MyThread("黄牛A"); MyThread myThread2 = new MyThread("黄牛B"); MyThread myThread3 = new MyThread("黄牛C"); myThread1.start(); myThread2.start(); myThread3.start(); } }
2.實作Runnable介面覆寫run方法
class MyRunnable implements Runnable{ @Override public void run() { for(int i =0;i <10;i++){ System.out.println(Thread.currentThread().getName()+"、i="+i); } } } public class RunnableTest { public static void main(String[] args) { Runnable runnable =new MyRunnable(); //向上转型 new Thread(runnable,"线程A").start(); //设置线程名字 new Thread(runnable).start(); //没有设置线程名字,则是系统默认从 Thread-(0,1,2...) Thread thread1 = new Thread(runnable); thread1.setName("线程B"); //调用setName()设置名字 thread1.start(); } }
這裡呢順便介紹了線程名字的創建3種:
(1)在括號後直接加名字
(2)調用setName()設置名字
(3)不設定名字,則是系統預設從Thread-(0,1,2....)
3.實作Callable介面覆寫calld94943c0b4933ad8cac500132f64757f方法
class MyCallable implements Callable<String>{ private int ticket =20; @Override public String call() throws Exception { while(ticket > 0){ System.out.println(Thread.currentThread().getName()+"还剩下"+ticket--+"票"); } return "票卖完了,再见"; } } public class CallableTest { public static void main(String[] args) throws ExecutionException, InterruptedException { //产生Callable对象 MyCallable myCallable = new MyCallable(); //产生FutureTask对象 FutureTask futureTask = new FutureTask(myCallable); Thread thread = new Thread(futureTask); thread.start(); System.out.println(futureTask.get()); //接收Callable对象的返回值 } }
1.先產生Callable物件
2.產生FutureTask物件
3.建立Thread傳入FutureTask物件
4. 接收Callable介面的回傳值是Future中get()方法
三個建立執行緒的方式比較
#1 .繼承Thread類別有單一繼承局限,相對而言實作Runnable介面更加靈活,並且Thread類別本身也實作了Runnable介面輔助真實執行緒類別
2.實作Runnable介面可以更好的實作程式共享的概念
3.Callable介面就是需要有回傳值時用到
以上內容若有明顯錯誤請指出,不勝感激。謝謝!
更多相關內容請上PHP中文網:JAVA影片教學
#以上是多線程-線程的創建的詳細內容。更多資訊請關注PHP中文網其他相關文章!