Java线程的状态有6种

1、  初始(NEW):新创建了一个线程对象,但还没有调用start()方法。

2、  运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。(什么是就绪) 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。(什么是运行)就绪状态的线程在获得CPU时间片后变为运行中状态(running)。

3、  阻塞(BLOCKED):表示线程阻塞于锁。

4、  等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)。

5、  超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。

6、  终止(TERMINATED):表示该线程已经执行完毕。

Java创建线程

1、  继承thread类

/**
* Created by buer on 2018/12/21.
*/
public class ThreadTest extends Thread{
@Override
public void run() {
System.out.println("我是1线程");
} public static void main(String[] args) {
new ThreadTest().start();
}
}

2、  实现Runnable接口

  a) Runabnle接口

  b) 实例代码

/**
* Created by buer on 2018/12/21.
*/
public class ThreadTest { //JAVA7的方法
Thread i1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("我是 i1 线程");
}
}); //java8的方法lambda
Thread i2 = new Thread(()->System.out.println("我是 i2 线程"));
// @Override
// public void run() {
// System.out.println("sss");
// } public static void main(String[] args) {
ThreadTest threadTest = new ThreadTest();
threadTest.i1.start();
threadTest.i2.start();
}
}

  结果2种:

  或者

  由于线程调度不确定,导致结果不一致(需要操作系统的知识)

3、  使用callable(有返回值)和future

死锁实例

/**
* Created by buer on 2018/9/23.
*/
public class DeadLockDemo { //要用静态变量
private static String A = "A";
private static String B = "B";
public static void main(String[] args) {
new DeadLockDemo().deadLock();
} private void deadLock() {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (A){
try{
Thread.currentThread().sleep(2000);
}catch (Exception e) {
e.printStackTrace();
}
synchronized (B) {
System.out.println("1");
}
}
}
}); Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
synchronized (B) {
synchronized (A) {
System.out.println("2");
}
}
}
}); t1.start();
t2.start();
} }

  

最新文章

  1. JavaScript模板引擎artTemplate.js——是否编码输出html字符
  2. C语言static
  3. CF 445B DZY Loves Chemistry(并查集)
  4. HTC Vive开发笔记之SteamVR插件集成
  5. Mantis 1.2.19 on Windows Server 2012 r2 datacenter 安装及配置随笔
  6. 对Joint Training of Cascaded CNN for Face Detection一文的几点疑惑
  7. C++中全局变量的那些事儿
  8. jquery绑定事件on的用法
  9. 2015 ACM/ICPC Asia Regional Shanghai Online
  10. mysql查看数据表索引信息
  11. 新一代大数据处理引擎 Apache Flink
  12. MySQL SHOW TABLE 输出的每列详细介绍
  13. [LeetCode] Design Circular Deque 设计环形双向队列
  14. 华硕R系列的解剖图
  15. 关于WrapPanel和RadioButton相互配合使用实WrapPanel现动态添加或删除项
  16. Linux和windows 查看程序、进程的依赖库的方法
  17. Nginx缓存配置以及nginx ngx_cache_purge模块的使用
  18. 【转】ubuntu 11.04使用apt-get安装软件时一直提示E:unable to locate package
  19. vmware12中centos7以NAT连接网络
  20. java基础---->hashSet的简单分析(一)

热门文章

  1. 洛谷P3122 [USACO15FEB]圈住牛Fencing the Herd(计算几何+CDQ分治)
  2. 洛谷P3254 圆桌问题(最大流)
  3. 错误代码: 1142 REFERENCES command denied to user 'wuyong'@'localhost' for table 'orders'
  4. hexo的jacman主题配置
  5. Dancing Links算法(舞蹈链)
  6. 使用vue-cli脚手架搭建项目,保存编译时出现的代码检查错误(ESLint)
  7. js 的常用选择器
  8. Jupyter Notebook 使用入门
  9. QT中QWidget、QDialog以及MainWindow的区别
  10. Servlet记录