1. 程式人生 > >Java 建立多執行緒

Java 建立多執行緒

1、繼承java.lang.Thread方式

執行start方法:MyThread的run就會被執行

程式碼片段:

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
    	MyThread myThread = new MyThread();
    	myThread.start();
    	System.out.println("我的多執行緒測試!");
    }
}

class MyThread extends Thread{
	public void run(){
		Scanner scanner = new Scanner(System.in);
		System.out.println("輸入一條書本書目:");
		String bookName = scanner.next();
		System.out.println(bookName);
	}
}

顯示結果:

我的多執行緒測試!
輸入一條書本書目:Java應用教程
Java應用教程

2、獲取子執行緒的id和name

程式碼片段:

public class Main {
    public static void main(String[] args){
    	MyThread myThread = new MyThread();
    	myThread.start();
    	System.out.println("我的多執行緒測試!");
    }
}

class MyThread extends Thread{
	public void run(){
		String name = Thread.currentThread().getName();
		long id = Thread.currentThread().getId();
		System.out.println("子執行緒的name:"+name);
		System.out.println("子執行緒的id:"+id);
	}
}

顯示結果:

我的多執行緒測試!
子執行緒的name:Thread-0
子執行緒的id:8

3、多執行緒的執行順序隨機(cpu分配)

程式碼片段:

public class Main {
    public static void main(String[] args){
    	MyThread myThread = new MyThread();
    	MyThread myThread2 = new MyThread();
    	MyThread myThread3 = new MyThread();
    	myThread.start();
    	myThread2.start();
    	myThread3.start();
    	System.out.println("我的多執行緒測試!");
    }
}

class MyThread extends Thread{
	public void run(){
		String name = Thread.currentThread().getName();
		long id = Thread.currentThread().getId();
		System.out.println("子執行緒的name:"+name);
		System.out.println("子執行緒的id:"+id);
	}
}
class MyThread2 extends Thread{
	public void run(){
		String name = Thread.currentThread().getName();
		long id = Thread.currentThread().getId();
		System.out.println("子執行緒的name:"+name);
		System.out.println("子執行緒的id:"+id);
	}
}
class MyThread3 extends Thread{
	public void run(){
		String name = Thread.currentThread().getName();
		long id = Thread.currentThread().getId();
		System.out.println("子執行緒的name:"+name);
		System.out.println("子執行緒的id:"+id);
	}
}

顯示結果:

子執行緒的name:Thread-2
子執行緒的id:10
子執行緒的name:Thread-1
子執行緒的name:Thread-0
子執行緒的id:9
子執行緒的id:8

4、實現java.lang.Runnable介面

程式碼片段:

import java.util.Scanner;
public class Main {
    public static void main(String[] args){
    	 Runnable runnable = new Runnable() {
			@Override
			public void run() {
				Scanner scanner = new Scanner(System.in);
				System.out.println("輸入書名:");
				String bookName = scanner.next();
				System.out.println("書名:"+ bookName);				
			}
		};
		new Thread(runnable).start(); 
		System.out.println("多執行緒runnable測試");
    }
}

顯示結果:

多執行緒runnable測試
輸入書名:Java應用教程
書名:Java應用教程

5、使用Callable+FutureTask獲取執行結果建立多執行緒

task.get()是阻塞式的方法,直到call()返回結果

程式碼片段:

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class Main {
    public static void main(String[] args) throws InterruptedException, ExecutionException{
    	FutureTask<String> task = new FutureTask<>(new Callable<String>() {
			@Override
			public String call() throws Exception {
				return "Java基礎教程";
			}   		
		});
    	new Thread(task).start();
    	System.out.println(task.get());
    	System.out.println("Callable+FutureTask獲取執行結果建立多執行緒");
    }
}

顯示結果:

Java基礎教程
Callable+FutureTask獲取執行結果建立多執行緒