java中实现多线程的几种方式(简单实现)
一、以下只是简单的实现多线程
1:继承Thread
2:实现 Runnable
3:实现callable
如果需要返回值使用callable,如果不需要返回最好使用runnable,因为继承只能单继承,所以不推荐使用Thread。
具体代码
@RunWith(SpringRunner.class)
@SpringBootTest
public class Thread_Test {
private class Thread1 extends Thread{
@Override
public void run() {
super.run();
System.out.println("执行了Thread的Run方法");
}
}
private class Thread2 implements Runnable{
@Override
public void run() {
System.out.println("执行了Runnable的Run方法");
}
}
private class Thread3 implements Callable<String>{
@Override
public String call() throws Exception {
System.out.println("执行了Runnable的Run方法");
Thread.sleep(5000); //让线程休眠5s,测试返回值
return "I am callable";
}
}
@Test
public void testThread() throws Exception{
Thread1 t1 = new Thread1();
new Thread(t1).start();
Thread2 t2 = new Thread2();
new Thread(t2).start();
Thread3 t3 = new Thread3();
FutureTask<String> task = new FutureTask<String>(t3);
new Thread(task).start();
System.out.println(task.get()); //是异步获取的值,等待程序执行完
}
}
执行结果

二、停止线程的方法
suspend()、resume()、stop() ,不建议使用,这种是强制关闭线程,如果有锁可能不会释放。
建议使用interrupt()方法停止线程。
interrupt:中断一个线程。不是强行的中断,只是添加了一个中断标志位true。
interrupted:判定当前线程是否处于中断状态。
static的 isInterrupted:判定当前线程是否处于中断状态。他会把中断的标志位给位false。
代码:public class EndThread {
private static class UseThread extends Thread{
@Override
public void run() {
String name = Thread.currentThread().getName();
while(!isInterrupted()){ //当中断标识位位true,就跳出循环。
System.out.println(name+"is run");
}
System.out.println(name + "is flag "+isInterrupted()); //当前的标识位为true
interrupted(); //interrupted把中断标识位设置为false。
System.out.println(name + "is flag "+isInterrupted()); //当前的标识位为false
}
}
public static void main(String[] args) throws Exception {
Thread u = new UseThread();
u.start();
Thread.sleep(1000);
u.interrupt(); //告诉程序要中断了,设置中断标志位。
}
}
运行结果
Thread-0is run
Thread-0is run
Thread-0is flag true
Thread-0is flag false
java中实现多线程的几种方式(简单实现)的更多相关文章
- Java中实现多线程的四种方式
Java多线程实现方式主要有四种:继承Thread类.实现Runnable接口.实现Callable接口通过FutureTask包装器来创建Thread线程.使用ExecutorService.Cal ...
- Java中实现多线程的两种方式之间的区别
Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...
- Java中HashMap遍历的两种方式
Java中HashMap遍历的两种方式 转]Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: ...
- JAVA中集合输出的四种方式
在JAVA中Collection输出有四种方式,分别如下: 一) Iterator输出. 该方式适用于Collection的所有子类. public class Hello { public stat ...
- java中数组复制的两种方式
在java中数组复制有两种方式: 一:System.arraycopy(原数组,开始copy的下标,存放copy内容的数组,开始存放的下标,需要copy的长度); 这个方法需要先创建一个空的存放cop ...
- Java中创建线程的三种方式以及区别
在java中如果要创建线程的话,一般有3种方法: 继承Thread类: 实现Runnable接口: 使用Callable和Future创建线程. 1. 继承Thread类 继承Thread类的话,必须 ...
- java中使用mongodb的几种方式
最近有时间看了一下mongodb,因为mongodb更容易扩展所以考虑使用mongodb来保存数据. 首先下载安装mongodb,这是很简单的,装好后使用mongod命令就可以启动数据库.正式部署的话 ...
- java中设置代理的两种方式
1 前言 有时候我们的程序中要提供可以使用代理访问网络,代理的方式包括http.https.ftp.socks代理.比如在IE浏览器设置代理. 那我们在我们的java程序中使用代理呢,有如下两种方式. ...
- java中实现同步的两种方式:syschronized和lock的区别和联系
Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,我 ...
随机推荐
- CentOS使用fdisk扩展磁盘空间
使用情况: 1. 虚拟机配置150G硬盘,初始化为/dev/sdb1,后因为磁盘空间不够使用,动态扩容至300G,扩容完成后,想要动态扩容/dev/sdb1分区. 2. 磁盘空间300G,之前分区只划 ...
- radio中最佳解决方案
radio中最佳解决方案 1.html中 <td> <input id="status" name="status" type="r ...
- myeclipse 下载 checkstyle 引入后不显示问题
参照这篇博客,http://blog.csdn.net/zzq900503/article/details/42003499 下载最新的checkstyle版本后,在本地导入后一直不显示,步骤什么的也 ...
- C# mvc读取模板并修改上传到web
C# mvc读取模板并修改上传到web 后台: public FileResult GetXls() { FileStream fs = new FileStream(System.Web.HttpC ...
- 从Event Loop谈JS的运行机制
这里主要是结合Event Loop来谈JS代码是如何运行的. 事件循环对于我们平时开发可以说是特别重要,可以让我们写出更好的代码. 到这里相信我们已经知道了JS引擎是单线程,而且这里会用到前面说的的几 ...
- June 21st 2017 Week 25th Wednesday
Discontent is the first step in progress. 不知足是前进中的第一步. Several days ago, I wrote down a quote which ...
- 理解Underscore中的节流函数
上一篇中讲解了Underscore中的去抖函数(_.debounced),这一篇就来介绍节流函数(_.throttled). 经过上一篇文章,我相信很多人都已经了解了去抖和节流的概念.去抖,在一段连续 ...
- C# using、namespace使用注意事项
一.using 用法 1.引用命名空间. 如: using System; 2.自动释放对象使用的资源. 如: using (SqlConnection connection = new SqlCon ...
- ListView实现分页加载(三)实现分页加载
在上一篇中,我们实现了底部布局(即带上了进度条).没有读过的朋友可以点击下面的链接: http://www.cnblogs.com/fuly550871915/p/4866966.html 但是进度条 ...
- 【HAOI2010】工厂选址题解
题目描述 某地区有m座煤矿,其中第i号矿每年产量为ai吨,现有火力发电厂一个,每年需用煤b吨,每年运行的固定费用(包括折旧费,不包括煤的运费)为h元,每吨原煤从第i号矿运到原有发电厂的运费为Ci0(i ...