一.多线程的优势: 多线程能带动cpu的处理效率,能使代码中的方法开启多个cpu运行,使运行速度更快。
二.多线程的三种实现方式:
1.继承java.lang.Thread, 重写run()方法
public class thisThread extends Thread {
@Override
public void run() {
System.out.println("这是一个多线程:"+Thread.currentThread().getId());
}
}
2.实现Runnable接口,重写run()方法
public class thisRunnable implements Runnable{
@Override
public void run() {
System.out.println("这是一个多线程:"+Thread.currentThread().getId());
}
}
3.实现Callable接口
public class thisRunnable implements Callable<T>{
@Override
public T void call() {
return null;
}
}
三.线程的几种状态
新建(new),可运行(Runnable),运行(Running),阻塞(Blocked),死亡(DEAD)
四.线程池的创建方式
1.newCachedThreadPool:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
2.newFixedThreadPool:创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
3.newScheduledThreadPool:创建一个定时线程池
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
4.newSingleThreadExecutor:创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
但是以上线程基本不推荐使用了,推荐使用原生线程池:
ExecutorService sellerInvoicePushExecutor = new ThreadPoolExecutor(20, 30, 50, TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>(102400));
20:初始线程 30:最大线程数 50:超时时间 TimeUnit.SECONDS:超时单位为秒 new LinkedBlockingDeque:缓存线程数