0036 Java學習筆記-多線程-創立線程的三種方式。本站提示廣大學習愛好者:(0036 Java學習筆記-多線程-創立線程的三種方式)文章只能為提供參考,不一定能成為您想要的結果。以下是0036 Java學習筆記-多線程-創立線程的三種方式正文
package testpack;
public class Test1 {
public static void main(String[] args){
System.out.println("如今是主線程: "+Thread.currentThread()); //用靜態辦法獲取以後正在執行的線程
System.out.println("上面新建兩個線程");
new A(100).start();
new A(100).start(); //這裡開啟兩個線程,但不是完成同一件義務
}
}
class A extends Thread{ //承繼Thread類
private int tickets;
A (int tick){
tickets=tick;
}
public void run(){
for (;tickets>0;tickets--) {
System.out.println("以後線程:"+getName()+" 賣出第 "+tickets+" 張票。"); //用this取得以後線程
if (tickets==1){
System.out.println("票已賣完,以後線程是: "+getName());
}
}
}
}
package testpack;
public class Test1 {
public static void main(String[] args){
System.out.println("如今是主線程: "+Thread.currentThread());
System.out.println("上面新建兩個線程");
A a=new A(100); //創立一個義務的對象
new Thread(a,"線程A").start(); //以同一個義務對象為target,開啟兩個線程
new Thread(a,"線程B").start(); //兩個線程完成同一項義務,但是二者協作溝通不好
}
}
class A implements Runnable{ //完成Runnable接口
private int tickets;
A (int tick){
tickets=tick;
}
public void run(){ //異樣重寫run()辦法,就是線程要完成的義務
for (;tickets>0;tickets--) {
System.out.println("以後線程:"+Thread.currentThread()+" 賣出第 "+tickets+" 張票。");
if (tickets==1){
System.out.println("票已賣完,以後線程是: "+Thread.currentThread());
}
}
}
}
package testpack;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class Test1 {
public static void main(String[] args){
Callable a=new A(100); //Callble對象不能直接用於Thread的target
FutureTask task=new FutureTask(a); //FutureTask完成了Future接口和Runnable接口,可以用作target
new Thread(task,"線程A").start();
new Thread(task,"線程B").start(); //奇異的是,該線程未運轉,學到前面再看,估量用法不對。
try{
System.out.println(task.get()); //get()辦法獲取線程義務的前往值,無參數則阻塞到線程執行完成
}catch(Exception ex){
ex.printStackTrace();
}
}
}
class A implements Callable<String>{ //完成Callable接口,留意泛型
private int tickets;
A (int tick){
tickets=tick;
}
public String call(){ //重寫call()辦法,相當於Runnable的run()辦法,但有前往值
for (;tickets>0;tickets--) {
System.out.println("以後線程:"+Thread.currentThread()+" 賣出第 "+tickets+" 張票。");
}
if (tickets==0) {
return "一切票都已賣出!";
}else{
return "票未全部賣出,有異常";
}
}
}