【Java多线程系列一】Java实现线程方法
2024-10-07 19:17:07
Java实现线程的两种方法
- 继承Thread类
- 实现Runnable接口
它们之间的区别如下:
- Java的类为单继承,但可以实现多个接口,因此Runnable可能在某些场景比Thread更适用
- Thread实现了Runnable接口,并且有更多实用方法
- 实现Runnable接口的线程启动时仍然需要依赖Thread或者java.util.concurrent.ExecutorService
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import org.junit.Assert;
import org.junit.Test; /**
* 线程的两种实现方法
*/
public class ThreadImplementTest { private Map<Integer, Long> map = new ConcurrentHashMap<>(); class MethodOne extends Thread {
private int count = 0; @Override
public void run() {
map.put(++count, this.getId());
}
} class MethodTwo implements Runnable {
private int count = 31; @Override
public void run() {
map.put(++count, Thread.currentThread().getId());
}
} @Test
public void testThread(){
//方法一:继承Thread
MethodOne extendsThread = new MethodOne();
extendsThread.start(); //方法二:实现Runnable接口
MethodTwo implementsRunnable = new MethodTwo();
new Thread(implementsRunnable).start();
System.out.println("ddd");
} @Test
public void testTwoRuns() throws InterruptedException{
/*
* 注意:一下两种方法启动方式截然不同
*/
Thread tmp;
MethodOne extendsThread = new MethodOne();
for (int i = 0; i < 3; i++) {//只有一个线程
tmp = new Thread(extendsThread);
tmp.start();
tmp.join();
} Assert.assertTrue(map.containsKey(3));
Assert.assertTrue(map.containsKey(2));
Assert.assertTrue(map.containsKey(1)); map.clear();// 清空缓存
for (int i = 0; i < 3; i++) {// 三个不同线程
tmp = new MethodOne();
tmp.start();
tmp.join();
}
Assert.assertEquals(1, map.size());
Assert.assertTrue(map.containsKey(1));
}
}
最新文章
- emacs配置eslint 语法检查.找不到node解决
- Cubieboard2裸机开发之(三)C语言操作LED
- 六个创建模式之单例模式(Singleton Pattern)
- JDBC学习笔记(9)——DBUtils的使用
- 2015第42周六Pgsql全文索引
- Ubuntu 14.04—Eclipse配置Pydev
- 关于通过addClass与removeClass用jquery控制有良好兼容的CSS3样式
- Linux编译安装Mariadb数据库
- 【摘】Oracle 11g EM安全证书问题无法访问的解决办法
- PHP文件管理—实现网盘以及压缩包的功能操作
- ckeditor_学习(1) 基本使用
- linux基础之bash特性
- oracle 查询分区表的最大分区以及分区字段的最大值
- docker machine 使用教程
- 【机器学习】从分类问题区别机器学习类型 与 初步介绍无监督学习算法 PAC
- 【scala】scala 数组 (三)
- 基尼系数(Gini coefficient),洛伦茨系数
- Java学习(匿名对象、内部类、包、import、代码块)
- 安装使用babel-polyfill。让IE支持es6
- Elasticsearch 插件head和kibana