关于Java线程,看这一篇就绝对够用了
Java线程的三种创建方式
继承Thread对象
class ThreadImpOne extends Thread{@Overridepublic void run(){System.out.println("ThreadImpOne");}}
实现Runnalbe接口
class ThreadImpTwo implements Runnable{@Overridepublic void run() {System.out.println("ThreadImpTwo");} }
注意:光理论是不够的,在此送大家一套2020最新Java架构实战教程+大厂面试宝典,点击此处 进来获取 一起交流进步哦!
实现Callable接口 import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class Main{public static void main(String args[]) throws Exception{ThreadImpThree threadThree = new ThreadImpThree();FutureTask<Integer> task = new FutureTask<Integer>(threadThree);new Thread(task).start();System.out.println(task.get());} } class ThreadImpThree implements Callable<Integer>{@Overridepublic Integer call(){System.out.println("ThreadThreeImp");return 666;} } //ThreadThreeImp //666
Java线程五种状态
新建状态(New): 线程对象被创建后,就进入了新建状态。Thread thread = new Thread()。
就绪状态(Runnable): 可执行状态,等待CPU调度。新建状态调用thread.start()就进入了就绪状态
运行状态(Running): 线程获取CPU时间进行执行
阻塞状态(Blocked): 由于某中原因,放弃CPU使用权,暂时停止运行。放弃的原因主要分为三种
等待阻塞:调用了同步对象的wait方法
同步阻塞:线程获取synchnoized同步锁失败,进入同步阻塞状态
其他阻塞:调用了线程的sleep、join方法或者发出了IO请求。sleep状态超时,join等待的线程执行完,或者I/O就绪时,线程会转入就绪状态
死亡状态(Dead):线程执行完,或者异常退出,线程就会进入死亡状态。
Java线程三种终止方式
修改标志位
比如在服务端程序中可能会使用 while(true) { ... }类似的循环结构来不断的接收来自客户端的请求。此时就可以用修改标志位的方式来结束 run() 方法的执行
while(!exit){doSomething(); }
stop方法终止线程
thread.stop()方法,可以立即终止线程,但是stop()方法不是安全的方法
调用 stop() 方法会立刻停止 run() 方法中剩余的全部工作,包括在 catch 或 finally 语句中的,并抛出ThreadDeath异常(通常情况下此异常不需要显示的捕获),因此可能会导致一些清理性的工作的得不到完成,如文件,数据库等的关闭。
interrupt方法 thread.interrupt方法,区别于stop方法,线程执行此方法后,会将线程的中断标志设置为true. 如果线程想响应中断,会进行中断操作,如果不想,就忽略此消息,线程的中断取决于线程本身。 public class Main{public static void main(String args[]) throws Exception{Thread thread = new Thread(new ThreadImp());thread.start();Thread.sleep(3000);thread.interrupt();} } class ThreadImp extends Thread{@Overridepublic void run() {while(true) {System.out.println(Thread.interrupted());for(int i = 0; i < 100000; i++) {for(int j = 0; j < 50000; j++){long value = Integer.MAX_VALUE * Integer.MAX_VALUE;}}}} } //线程一直会运行,肯定会有一次输出true
上面线程会一直运行,并且只会输出一次true,其余均为false,想了解原因的,可以详细阅读一下线程中断机制,这里就不赘述了。
注意:光理论是不够的,在此送大家一套2020最新Java架构实战教程+大厂面试宝典,添加小助手VX:xuanwo008免费领取
大厂月薪30k+面试宝典:
如何高效拿下 阿里,腾讯等八家大厂的offer的呢??收集了美团大神整理的Java核心知识点,面试时面试官必问的知识点
关于Java线程,看这一篇就绝对够用了相关推荐
- 深入浅出Java线程池:理论篇
前言 很高兴遇见你~ 借助于很多强大的框架,现在我们已经很少直接去管理线程,框架的内部都会为我们自动维护一个线程池.例如我们使用最多的okHttp以及他的封装框架Retrofit,线程封装框架RxJa ...
- Java线程入门第三篇
Java内存模型(jmm) Why:保证多线程正确协同工作 看图说明: 文字解释:线程a和线程b通信过程,首先线程a把本地内存的共享变量更新到主内存中,然后线程b去读取主内存的共享变量,最后更新到自己 ...
- override java field_JavaPoet 看这一篇就够了
Post Views: 13 JavaPoet 是用来生成 Java 代码的一个 Java Library. 学习 JavaPoet, 唯一也是最快的方法是自己动手生成一个 Java Code 文件. ...
- Java基础看这一篇就够了
一.基础知识: 1.JVM.JRE和JDK的区别: JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性. java语言是跨平台,jvm不是跨平台的. J ...
- serve注解是加在哪个类_不会 Java 注解 ? 看这一篇文章!
对于Java注解,我之前的印象是很模糊的,总觉得这个东西经常听说,也经常用,但是具体是怎么回事,好像没有仔细学习过,说到注解,立马想到@Controller,仅此而已. 对于Java注解,我咨询过一些 ...
- java面试看这一篇就够了
由于最近比较忙,项目赶的比较紧所以一直没有更新整理面试题,这次抽了些时间把答应大家的面试题整理出来了感谢各位小伙伴们的支持,你们的支持是我分享的动力,希望在以后的日子里咱们共同学习进步.如果感觉不错就 ...
- 死磕 java线程系列之终篇
(手机横屏看源码更方便) 简介 线程系列我们基本就学完了,这一个系列我们基本都是围绕着线程池在讲,其实关于线程还有很多东西可以讲,后面有机会我们再补充进来.当然,如果你有什么好的想法,也可以公从号右下 ...
- java 线程模型_Java基础篇之Java线程模型
Java运行系统在很多方面依赖于线程,所有的类库设计都考虑到多线程.实际上,Java使用线程来使整个环境异步.这有利于通过防止CPU循环的浪费来减少无效部分. 为更好的理解多线程环境的优势可以将它与它 ...
- java注解看这一篇就够了
java注解-最通俗易懂的讲解 转载 Tanyboye 最后发布于2018-06-05 10:24:36 阅读数 27063 收藏 发布于2018-06-05 10:24:36 分类专栏: java ...
最新文章
- docker如何迁移数据目录
- Java基础-OOP特性之封装、继承、多态、抽象
- hbase shell命令扩展(转自http://www.netfoucs.com/cuirong1986/article/details/7986900)
- python爬虫网络请求超时是什么意思_爬虫请求超时设置
- 《篡权的ss》-linux命令五分钟系列之三十一
- P3911 最小公倍数之和
- POJ 1276 Cash Machine
- Silverlight实用窍门系列:51.Silverlight页面控件的放大缩小、Silverlight和Html控件的互相操作【附带源码实例】...
- html基础之 input:type
- app下载 微信扫码打开 提示用户用浏览器打开
- 子网划分,掩码转换计算
- 什么是动态DNS(DDNS)
- openstack controller ha测试环境搭建记录(二)——配置corosync和pacemaker
- Bootstrap4 div居中
- 拥有一本CISP证书,我的工资会翻倍吗?
- 常用去除离群值的算法!
- Rich feature hierarchies for accurate object detection and semantic segmentation
- 【rmzt:保时捷911炫酷主题】
- 2022年R2移动式压力容器充装考试题库及模拟考试
- 注册会计师各科复习方法