Java 创建多线程

版权声明: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获取执行结果创建多线程

猜你喜欢

转载自blog.csdn.net/Rison_Li/article/details/83178765