Java中实现线程的方式有哪些
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇文章给大家分享的是有关Java中实现线程的方式有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Java中实现线程的方式Java中
千家信息网最后更新 2025年02月01日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安全错误
数据库的锁怎样保障安全
网络安全红线包括哪些等级
黄浦区推广软件开发厂家价格走势
服务器代工
无线网络安全设备有哪些
服务器文件存放审计
通信网络技术公司概况
如何把数据库部署在阿里云上
杭州一站式网络技术优势
服务器选股
完美电竞连接社区服务器失败
软件开发后端找工作
手机多控软件开发
企业邮箱工作站服务器
专业的软件开发培训
科协网络技术部复试
怎么确定服务器cpu是几核的
毫米云服务器要实名认证吗
嵌入式软件开发bat
网络安全宣传周启动仪式议程
关于物联网网络安全论文题目
当代大学生的网络安全问题
中新服务器有快充吗
普通电脑用服务器内存条
拼多多无货源店群软件开发
河北医保软件开发
gis终端和服务器
网络安全学习宣传总结
互联网区块链科技
美魅网络技术
中国天津网络安全周