Java中实现线程的方式有哪些
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇文章给大家分享的是有关Java中实现线程的方式有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java中实现线程的方式Java中
千家信息网最后更新 2026年11月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安全错误
数据库的锁怎样保障安全
互联网与科技
互联网科技公司华为
互联网电商科技
互联网是不是新科技
互联网为科技
互联网公司 科技公司
艾特科技互联网
友谊互联网络科技
互联网科技有限公司 翻译
无锡溥仪互联网科技有限公司
玖二柒互联网科技公司待遇
北京三清互联网科技
互联网科技博主是什么意思
互联网领先科技宣传片
浙南科技城互联网大厦招聘
下一代互联网重大应用科技园
全球科技与互联网公司市值变化
北京天晋互联网科技有限公司
瑞安市蟠桃会互联网科技有限公司
广州全民伙伴互联网科技有限公司
广州大一互联网络科技有限公司
互联网科技公司华为
恒生科技互联网指数分析
互联网为啥属于高科技
江阴互联网智能科技产品进口
互联网与医疗科技
河南住房之家互联网科技
厦门江牛科技互联网
本届互联网大会上的黑科技
广州三三互联网科技有限公司