Java中实现线程的方式有哪些
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇文章给大家分享的是有关Java中实现线程的方式有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java中实现线程的方式Java中
千家信息网最后更新 2025年12月02日Java中实现线程的方式有哪些
本篇文章给大家分享的是有关Java中实现线程的方式有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
Java中实现线程的方式
Java中实现多线程的方式的方式中最核心的就是 run()方法,不管何种方式其最终都是通过run()来运行。
Java刚发布时也就是JDK 1.0版本提供了两种实现方式,一个是继承Thread类,一个是实现Runnable接口。两种方式都是去重写run()方法,在run()方法中去实现具体的业务代码。
但这两种方式有一个共同的弊端,就是由于run()方法是没有返回值的,所以通过这两方式实现的多线程读无法获得执行的结果。
为了解决这个问题在JDK 1.5的时候引入一个Callable接口,根据泛型V设定返回值的类型,实现他的call()方法,可以获得线程执行的返回结果。
虽然call()方法可以获得返回值,但它需要配合一个Future才能拿到返回结果,而这个Future又是继承了Runnable的一个接口。通过查阅源码就可以发现Future的实现FutureTask其在做具体业务代码执行的时候仍是在run()里面实现的。
FutureTask 源码片段:
public void run() {
if (state != NEW ||
!UNSAFE.compareAndSwapObject(this, runnerOffset,
null, Thread.currentThread()))
return;
try {
Callable c = callable;
if (c != null && state == NEW) {
V result;
boolean ran;
try {
result = c.call();
ran = true;
} catch (Throwable ex) {
result = null;
ran = false;
setException(ex);
}
if (ran)
set(result);
}
} finally {
// runner must be non-null until state is settled to
// prevent concurrent calls to run()
runner = null;
// state must be re-read after nulling runner to prevent
// leaked interrupts
int s = state;
if (s >= INTERRUPTING)
handlePossibleCancellationInterrupt(s);
}
} Java多线程实现方式的代码示例:
通过继承Thread类实现
public class ThreadTest {
public static void main(String[] args) throws Exception {
Thread myThread = new MyThread();
myThread.setName("MyThread-entends-Thread-test");
myThread.start();
}
}
class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread Name:" + Thread.currentThread().getName());
}
}通过实现Runnable接口实现
public class ThreadTest {
public static void main(String[] args) throws Exception {
MyRunnableThread myRunnable = new MyRunnableThread();
Thread myRunnableThread = new Thread(myRunnable);
myRunnableThread.setName("MyThread-implements-Runnable-test");
myRunnableThread.start();
}
}
class MyRunnableThread implements Runnable {
@Override
public void run() {
System.out.println("Thread Name:" + Thread.currentThread().getName());
}
}通过实现Callable接口实现
public class ThreadTest {
public static void main(String[] args) throws Exception {
Callable myCallable = new MyCallableThread();
FutureTask futureTask = new FutureTask<>(myCallable);
Thread myCallableThread = new Thread(futureTask);
myCallableThread.setName("MyThread-implements-Callable-test");
myCallableThread.start();
System.out.println("Run by Thread:" + futureTask.get());
//通过线程池执行
ExecutorService executorService = Executors.newCachedThreadPool();
executorService.submit(futureTask);
executorService.shutdown();
System.out.println("Run by ExecutorService:" + futureTask.get());
}
}
class MyCallableThread implements Callable {
@Override
public String call() throws Exception {
return Thread.currentThread().getName();
}
} 以上就是Java中实现线程的方式有哪些,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
方式
线程
方法
接口
中实
代码
就是
结果
业务
时候
更多
源码
知识
篇文章
实用
也就是
又是
工作会
弊端
文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
奉化一站式软件开发设计
华为AMS软件开发
焦作做软件开发
天津华为服务器维修维保费用
如何导入json数据到数据库
彩票公司做软件开发
网络安全素质教育题
我的世界服务器模组不能用怎么办
煤矿计算机网络技术考试试题
西安市网络安全保卫支队电话
崇明区智能化软件开发销售
磺胺生产批号数据库
关系数据库中两表关联主表
云服务器无映射
怎样搭建我的世界国际版服务器
云南网络安全评估资质单位
分布式能源网络技术
软件开发证书报考流程
数据库管理员岗位核心能力
网络安全口号2020
内蒙古互赢网络技术有限公司
国外重大的网络安全事件
香港低价母鸡服务器
安徽网络安全审计硬件设备制造商
网络安全毕业设计展板
台州国税安全接入服务器地址
构造数据库大数据量
如何向数据库添加数据记录
无锡专业服务器供货厂
知名催收软件开发公司