当前位置: 首页 > ai >正文

创建线程有哪几种方式

方法一,直接使用Thread

//创建线程对象
Thread t=new Thread(){public void run(){//要执行的任务}
}

例如:

//构造方法的参数是给线程制定名字,推荐
Thread t1=new Thread(){@Override//从run方法内实现了要执行的任务public void run(){System.out.println("running------"");}
}
t1.start9);

方法二:使用Runnable配合Thread
把【线程】和【任务】(要执行的代码)分开
*Thread代表线程
*Runnable可运行的任务(线程要执行的代码)

Runnable runnable=new Runnable(){public void run(){//要执行的任务}
}
//创建线程对象
Thread t=new Thread(runnbale);
//启动线程
t.start();

例如

//创建任务对象
Runnable runnable=new Runnable(){@Overridepublic void run(){System.out.println("running------");}
}
//参数1是任务对象;参数2是线程名字是,推荐
Thread t2=new Thread(runnbale,"t2");
//启动线程
t2.start();

Java8以后可以使用lambda精简代码

//创建任务对象
Runnable task2=()-> {
System.out.println("running------");
{System.out.println("test------")
};
//参数1是任务对象;参数2是线程名字是,推荐
Thread t2=new Thread(runnbale,"t2");
//启动线程
t2.start();

Runnable接口,重写Thread的run方法

Thread与Runnbale的关系
(1)方法1是吧线程和任务合并在了一起,方法2是把线程和任务分来了
(2)用Runnable更容易与线程池等高级API配合
(3)用Runnable让任务类脱离了Thread继承体系,更灵活

方法3,FutureTask配合Thread
FutureTask能够接收Callable类型的参数我,用来处理有返回结果的情况

FutureTask<Integer> task3=new FutureTask(()->{System.out.println("running------");return 100;
});//参数1是任务对象,,参数2是线程名字,推荐
new Thread(task3,"t3").start();//主线程阻塞,同步等待task执行完毕的结果
Integer result=task3.get();
System.out.println("返回结果是:"+result);

Callable接口是一个有返回结果的接口,里面有个call()方法


FutureTask<Integer> task3=new FutureTask(new Callable<Integer>()->{public Integer call() throws Exception{System.out.println("running------");Thread.sleep(2000);return 100;}
});new Thread(task3,"t3").start();Integer result=task3.get();
System.out.println("返回结果是:"+result);
http://www.xdnf.cn/news/20041.html

相关文章:

  • 【数字孪生核心技术】数字孪生有哪些核心技术?
  • Kubernetes(四):Service
  • HyperWorks许可服务器设置
  • 企业微信AI怎么用?食品集团靠它砍掉50%低效操作,答案就是选对企业微信服务商
  • ZeroMQ 编译 项目使用流程文档
  • Android 生命周期函数调用原理
  • 《计算机网络安全》实验报告一 现代网络安全挑战 拒绝服务与分布式拒绝服务攻击的演变与防御策略(3)
  • 2025年数学建模国赛参考论文发布
  • 从碎片化到一体化:Java分布式缓存的“三级跳”实战
  • Spring Security 深度学习(六): RESTful API 安全与 JWT
  • 服务器IP暴露被攻击了怎么办?
  • 微算法科技 (NASDAQ:MLGO)利用量子密钥分发QKD技术,增强区块链系统的抗攻击能力
  • 自动化运维-ansible中对roles的创建与使用
  • 数据无言,网关有声 耐达讯自动化RS485转Profinet让千年液位数据“开口说话”
  • 在VSCode中更新或安装最新版的npx和uv工具
  • 数码视讯TR100-OTT-G1_国科GK6323_安卓9_广东联通原机修改-TTL烧录包-可救砖
  • 容器的定义及工作原理
  • 【华为Mate XTs 非凡大师】麒麟芯片回归:Mate XTs搭载麒麟9020,鸿蒙5.1体验新境界
  • Java 21 虚拟线程微服务进阶实战:2 个企业级场景源码 + 底层调度原理 + 性能调优指南
  • 艾克斯图片转换器,不只图片压缩
  • 音响皇帝BO,牵手全球第一AR眼镜雷鸟,耳机党坐不住了?
  • Kafka 内存池MemoryPool 设计
  • 海盗王64位dx9客户端修改篇之五
  • 别再手工缝合API了!开源LLMOps神器LMForge,让你像搭积木一样玩转AI智能体!
  • 《sklearn机器学习——回归指标1》
  • Linux中的fork详解
  • 好看的背景颜色 uniapp+小程序
  • vue3+ts导出PDF
  • 力扣55:跳跃游戏
  • 每周资讯 | 中国游戏市场将在2025年突破500亿美元;《恋与深空》收入突破50亿元