LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 239|回复: 0

基础线程机制

[复制链接]
发表于 2024-1-1 12:35:11 | 显示全部楼层 |阅读模式
本帖最后由 xhz 于 01-01 编辑

基础线程机制# ExecutorExecutor 管理多个异步任务的执行,而无需程序员显式地管理线程的生命周期。这里的异步是指多个任务的执行互不干扰,不需要进行同步操作。
主要有三种 Executor:
  • CachedThreadPool: 一个任务创建一个线程;
  • FixedThreadPool: 所有任务只能使用固定大小的线程;
  • SingleThreadExecutor: 相当于大小为 1 的 FixedThreadPool。
  1. public static void main(String[] args) {
  2.    ExecutorService executorService = Executors.newCachedThreadPool();
  3.     for (int i = 0; i < 5; i++) {
  4.         executorService.execute(new MyRunnable());
  5.     }
  6.    executorService.shutdown();
  7. }
复制代码



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



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



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



原文链接:https://pdai.tech/md/java/thread/java-thread-x-thread-basic.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表