Java并发之(八)之基础线程机制

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lwl2014100338/article/details/79946724

Executor

  • Executor 管理多个异步任务的执行,而无需程序员显示地管理线程的生命周期。
  • 主要有三种 Executor:
  • CachedTreadPool:一个任务创建一个线程;
  • FixedThreadPool:所有任务只能使用固定大小的线程;
  • SingleThreadExecutor:相当于大小为 1 的 FixedThreadPool。
public static void main(String[] args) {
    ExecutorService executorService = Executors.newCachedThreadPool();
    for (int i = 0; i < 5; i++) {
        executorService.execute(new MyRunnable());
    }
    executorService.shutdown();
}

Daemon

  • 守护线程是程序运行时在后台提供服务的线程,不属于程序中不可或缺的部分。
  • 当所有非守护线程结束时,程序也就终止,同时会杀死所有守护线程。
  • main() 属于非守护线程。
  • 使用 setDaemon() 方法将一个线程设置为守护线程。
public static void main(String[] args) {
    Thread thread = new Thread(new MyRunnable());
    thread.setDaemon(true);
}

sleep()

  • Thread.sleep(millisec) 方法会休眠当前正在执行的线程,millisec 单位为毫秒。
  • sleep() 可能会抛出 InterruptedException,因为异常不能跨线程传播回 main()中,因此必须在本地进行处理。线程中抛出的其它异常也同样需要在本地进行处理。
public void run() {
    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}

yield()

  • 对静态方法 Thread.yield()
    的调用声明了当前线程已经完成了生命周期中最重要的部分,可以切换给其它线程来执行。该方法只是对线程调度器的一个建议,而且也只是建议具有相同优先级的其它线程可以运行。
public void run() {
    Thread.yield();
}
阅读更多

扫码向博主提问

刘伟龙

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • Java
  • Spring
  • MyBatis
  • MySQL
  • Redis
去开通我的Chat快问
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页