版权声明:ByRisonBoy https://blog.csdn.net/Rison_Li/article/details/83178765
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获取执行结果创建多线程