多线程一网打尽

157 阅读1分钟

1、定义线程任务方法:

  • 继承Thread,共享变量用static修饰。局限:单继承
  • 实现Runnable,解决①的多实现。局限:无返回值,无法抛异常
  • 实现Callable:解决①的多实现,解决②的返回值、异常 class A extends Thread { public void run() {任务}} class B implements Runnable { public void run() {任务}} class C implements Callable<String> {public String call() throws Exception {任务}}  

2、创建线程

  • new Thread(new A/B/C)

  • 线程池ex=Executors.newFixedThreadPool(线程数量) ex.execute(new B)

3、启动线程

  • new A().start  或 new Thread(重写run).start

  • new Thread(new B()).start

  • FutureTask target =new FutureTask(new C());new Thread(target).start();

4、线程切换

  • 线程CPU时间片用完
  • 垃圾回收
  • 等待/阻塞

5、线程状态(五种)

这个应该都会吧,这里省略,只简单说说阻塞
阻塞:

  • 等待阻塞wait-->等待队列,释放锁
  • 同步阻塞lock-->锁池
  • 其他阻塞sleep/join-->不释放锁

6、线程终止的四种方式

其他都不建议,太强制性,建议使用 thread.interrupt() 中断线程

7、礼让、优先级、守护

  • Thread.yield() 当前线程礼让
  • thread.setPriority() 设置当前线程优先级
  • thread.setDaemon(true) 设置当前线程为守护线程,默认都是非守护。java进程需要等待所有线程都运行结束,才会结束,而守护线程,当所有的非守护线程都结束后,即使它没有执行完,也会强制结束,比如垃圾回收线程

8、四种线程池

  • Executors.newCachedThreadPool() 创建一个可根据需要创建新线程的线程池
  • Executors.newFixedThreadPool(n) 创建一个可重用固定线程数的线程池
  • Executors.newSingleThreadExecutor() :创建一个只有一个线程的线程池
  • Executors.newScheduledThreadPool(n) 创建一个线程池,它可安排在给定延迟

挖个坑,关于锁,以后专门开一栏