執行緒的建立方式
總結多執行緒的建立方式,多執行緒的實作一共四種方法,接下來將詳談一下建立的方式
#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中文網其他相關文章!