论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
程序人生
›
Java笔记(11) 多线程
Java笔记(11) 多线程
商道如狼道
金牌会员
|
2023-4-6 19:52:54
|
显示全部楼层
|
阅读模式
楼主
主题
934
|
帖子
934
|
积分
2802
Java原生支持多线程,主要通过以下四种方式实现多线程:
继承Thread类
实现Runnable接口
实现Callable接口
线程池
继承Thread类
通过创建Thread类的子类,并重写run()方法,通过调用start()方法启动线程。
public class TestThread extends Thread {
@Override
public void run() {
//run方法线程体
for (int i = 0; i < 10; i++) {
System.out.println("run方法线程体" + i);
}
}
public static void main(String[] args) {
//main线程,主线程
TestThread testThread = new TestThread();//创建一个线程对象
testThread.start();//调用start()方法,启动线程
for (int i = 0; i < 10; i++) {
System.out.println("main方法线程体" + i);
}
}
}
复制代码
可以看到两个线程的执行过程是混乱的,这就说明两个线程的执行顺序是随机的,并不是按照调用顺序来执行的。
但一般不建议使用继承Thread类的方式实现多线程,因为Java是单继承的,子类继承Thread类之后,会限制后续扩展。
实现Runnable接口
Thread类就实现了Runnable接口,我们也可以实现Runnable接口并实现run()方法来实现多线程。在创建Thread类的时候,将待执行线程作为参数传递,调用start()方法启动。
//实现Runnable接口,并实现run()方法
public class TestThread3 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("run 方法线程: " + i);
}
}
public static void main(String[] args) {
TestThread3 testThread3 = new TestThread3();//创建新线程
new Thread(testThread3).start();//创建Thread类,并将待执行线程作为参数传递进去,调用start()方法启动
for (int i = 0; i < 5; i++) {
System.out.println("main 方法线程: " + i);
}
}
}
复制代码
相比于第一种方案,更推荐使用接口方案,继承Runnable接口避免了收到单继承的限制,也方便同一个对象被多个线程使用
实现Callable接口
Callable接口类似于Runnable接口,都是为 其实例可能由另一个线程执行的类 而设计的。 不过相比于Runnable接口实现多线程的方式,实现Callable接口的多线程方式可以返回结果,并可能抛出异常。实现Callable接口并实现call方法。
public class TestCallable implements Callable<Boolean> {
@Override
public Boolean call() throws Exception { //实现call()方法
for (int i = 0; i < 5; i++) {
System.out.println("call 方法线程: " + i);
}
return true;
}
public static void main(String[] args) {
TestCallable testCallable = new TestCallable(); //创建新任务
ExecutorService executorService = Executors.newFixedThreadPool(1); //创建线程池
Future<Boolean> res = executorService.submit(testCallable); //将任务提交到线程池
for (int i = 0; i < 5; i++) {
System.out.println("main 方法线程: " + i);
}
executorService.shutdown(); //需要手动关闭线程池服务
}
}
复制代码
线程池
待编辑...
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
商道如狼道
金牌会员
这个人很懒什么都没写!
楼主热帖
【python】实现文章同步csdn社区自动化 ...
SQLI-LABS(Less-5)
容器化 | 在 Rancher 中部署 MySQL 集 ...
如何利用ipad随时随地开发代码 ...
Django生产环境静态资源404问题 ...
django 报错 'set' object is ...
MySQL数据库安装
Scrum 框架的四个会议还适用于哪些敏捷 ...
MVCC - Read View的可见性判断理解 ...
2022 Delphi 11开发苹果IOS证书等详细 ...
标签云
存储
服务器
浏览过的版块
Java
SQL-Server
快速回复
返回顶部
返回列表