多线程的三种创建方式:
package com.youyou.thread;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class ThreadDdemo03 {
public static void main(String[] args) {
new MyThread1().start();
new Thread(new MyThread2()).start();
//使用Future类来包装Callable对象,该对象封装了Callable对象的call方法的返回值
FutureTask<Integer> futureTask = new FutureTask<Integer>(new MyThread3());
new Thread(futureTask).start();
try{
//获取线程结束后的返回值
Integer integer = futureTask.get();
}catch (InterruptedException e){
e.printStackTrace();
}catch (ExecutionException e){
e.printStackTrace();
}
}
}
/*
* 方式一:继承Thread类
* */
class MyThread1 extends Thread {
@Override
public void run() {
super.run();
System.out.println("MyThread1");
}
}
/*
*
* 方式二:实现Runnable接口
* */
class MyThread2 implements Runnable{
@Override
public void run() {
System.out.println("MyThread2");
}
}
/*
* 方式三:实现Callable接口
* 与Runnable接口类型,提供了一个call函数作为线程执行体,但是功能比run更强大:
* 1. call方法具有返回值
* 2. call方法可以声明抛出异常
* */
class MyThread3 implements Callable<Integer>{
@Override
public Integer call() throws Exception {
System.out.println("MyThread3");
return 100;
}
}
Java线程池:
由于经常创建和销毁使用量特别大的资源,比如并发下的线程,对性能的消耗十分大。
可以提前创建多个线程,放入线程池中,使用时直接获取,使用完毕放回。池中。
好处:
1. 提高响应速度(减少了创建线程的时间)。
2. 减少资源消耗(重复利用线程池中的线程,不用每次都创建)。
3. 便于线程管理。
package com.youyou.thread;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadDemo04 {
public static void main(String[] args) {
//创建服务,参数为线程池大小
ExecutorService service = Executors.newFixedThreadPool(10);
//执行
service.execute(new MyThread05());
service.execute(new MyThread05());
service.execute(new MyThread05());
service.execute(new MyThread05());
//关闭连接
service.shutdown();
}
}
class MyThread05 implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
}
}