
多线程的三种创建方式:
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 futureTask = new FutureTask(new MyThread3());
new Thread(futureTask).start();
try{
//获取线程结束后的返回值
Integer integer = futureTask.get();
}catch (InterruptedException e){
e.printStackTrace();
}catch (ExecutionException e){
e.printStackTrace();
}
}
}
class MyThread1 extends Thread {
@Override
public void run() {
super.run();
System.out.println("MyThread1");
}
}
class MyThread2 implements Runnable{
@Override
public void run() {
System.out.println("MyThread2");
}
}
class MyThread3 implements Callable{
@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());
}
}