Java 开启多线程常见的4种方法
作者:全栈小定 发布时间:2023-11-23 02:30:10
标签:Java,开启,多线程
简介
常见的4种使用线程的方法:
1实现 Runnable 接口;
2实现 Callable 接口;
3继承 Thread 类。
4匿名内部类的写法。
1. 实现 Runnable 接口
编写测试类RunnableDemo
实现 Runnable 接口,实现接口中的 run() 方法。
public class RunnableDemo implements Runnable {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "执行了");
}
/**
* 使用 Runnable 实例再创建一个 Thread 实例,然后调用 Thread 实例的 start() 方法来启动线程。
*/
public static void main(String[] args) {
RunnableDemo runnable = new RunnableDemo();
Thread thread0 = new Thread(runnable);
Thread thread1 = new Thread(runnable);
thread0.start();
thread1.start();
}
}
运行main
方法
2. 实现 Callable 接口
与 Runnable
相比,Callable
可以有返回值,返回值通过 FutureTask
进行封装。
public class CallableDemo implements Callable<String> {
@Override
public String call() {
System.out.println(Thread.currentThread().getName() + "执行了");
return "执行成功!";
}
public static void main(String[] args) throws ExecutionException, InterruptedException {
CallableDemo mc = new CallableDemo();
FutureTask<String> ft0 = new FutureTask<>(mc);
FutureTask<String> ft1 = new FutureTask<>(mc);
Thread thread0 = new Thread(ft0);
Thread thread1 = new Thread(ft1);
thread0.start();
thread1.start();
System.out.println(ft0.get());
System.out.println(ft1.get());
}
}
启动main方法
3. 继承 Thread 类
同样也是需要实现 run() 方法,因为 Thread 类也实现了 Runable 接口。
public class ThreadDemo extends Thread {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "执行了");
}
public static void main(String[] args) {
ThreadDemo thread0 = new ThreadDemo();
ThreadDemo thread1 = new ThreadDemo();
thread0.start();
thread1.start();
}
}
启动main方法
4. 匿名内部类的写法
new Runnable()
是一个实现接口Runnable的类的对象,后面的run()
方法是该类里实现的方法,这就是匿名内部类的写法
public class ThreadTest {
public static void start() {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "执行了");
}
}).start();
}
public static void main(String[] args) {
start();
start();
}
}
来源:https://blog.csdn.net/qq_42411805/article/details/125090981


猜你喜欢
- 本文实例讲述了C#实现动态生成静态页面的类。分享给大家供大家参考,具体如下:动态生成静态页面有许多好处,比如生成html网页有利于被搜索引擎
- 短网址应用已经在全国各大微博上开始流行了起来。例如QQ微博的url.cn,新郎的sinaurl.cn等。我们在QQ微博上发布网址的时候,微博
- 详解C#编程获取资源文件中图片的方法本文主要介绍C#编程获取资源文件中图片的方法,涉及C#针对项目中资源文件操作的相关技巧,以供借鉴参考。具
- 最近公司在新版本上有一个需要,要在首页添加一个滑动效果,具体就是仿照X宝的商品详情页,拉到页面底部时有一个粘滞效果,如下图X东的商品详情页,
- 该接口实现了序列化,声明为 public interface Key extends SerializableKey 是所有密钥的顶层接口。
- 1. Spark中的RDDResilient Distributed Datasets(弹性分布式数据集)Spark中的最基本的抽象有了RD
- 本文实例分析了java中成员变量与局部变量区别。分享给大家供大家参考。具体分析如下:成员变量:在这个类里定义的私有变量,属于这个类。创建以及
- 讲解之前需要说明的是旋转屏幕:在系统的自动旋转屏幕开启的情况下,我们旋转屏幕手动设置屏幕:我们自己去调用Activity的 setReque
- 为什么要前后端分离?以Java Web项目为例,在传统的开发模式中,前端代码(Html、js、css)写在JSP中,甚至JSP中嵌入Java
- 一.相关知识:Java多线程程序设计到的知识:(一)对同一个数量进行操作(二)对同一个对象进行操作(三)回调方法使用(四)线程同步,死锁问题
- 由于我使用的是properties类型的配置文件,在对druid的参数进行配置的时候,多加了druid,也就是spring.datasour
- 由于是多态对象,基类类型的变量可以保存派生类型。 要访问派生类型的实例成员,必须将值强制转换 * 生类型。 但是,强制转换会引发 Invali
- 本篇文章介绍:如何使用Toolbar;自定义Toolbar;先来看一看效果,了解一下toolbar;布局文件:<android.sup
- java Lock接口java.util.concurrent.locks接口Lockpublic interface Loce
- 最初的源文件样式如下:用默认的配置进行格式化之后如下:使用如下配置后,格式化之后的代码如下:最终修改成下面这样比较合适:来源:https:/
- TV 3D卡片无限循环效果,供大家参考,具体内容如下##前言1、需求:实现3个卡片实现无限循环效果:1-2-3-1-2-3-1…,而且要实现
- 本文实例为大家分享了Android RxJava创建操作符Timer的具体代码,供大家参考,具体内容如下之前有写过Android实现倒计时之
- 环境准备项目结构与前文相同:我们添加新的静态资源:因为添加了静态资源,SpringMVC会拦截,所有需要在SpringConfig的配置类中
- 前言本文主要给大家介绍了关于Android中GridView布局整体居中的相关内容,是对于自己在项目中遇到问题的一个记录,分享出来供大家参考
- Android 系统每隔 16ms 会发出 VSYNC 信号重绘界面(Activity)。之所以是 16ms,是因为 Android 设定的