并发基本概念介绍
来源:互联网 发布:ec软件 编辑:程序博客网 时间:2024/06/05 14:44
1.线程的几种状态
线程有以下几种状态:
1.NEW:已经创建,但是还没有执行,如以下代码输出结果为NEW
Thread thread = new Thread();System.out.println(thread.getState());
2.RUNNABLE:正在运行的线程,如以下代码输出为:RUNNABLE
final Thread thread = new Thread(){ @Override public void run() { System.out.println(this.getState()); } }; thread.start();
3.BLOCKED:正在等待获取锁的线程,这种需要两个线程同时访问同步方法:如下代码所示:
private static final Object LOCK = new Object();
public static void main(String [] args){ Thread thread = new Thread(){ @Override public void run() { lock(); } }; Thread thread2 = new Thread(){ @Override public void run() { lock(); } }; thread.setName("线程1"); thread2.setName("线程2"); thread.start(); thread2.start();}public static void lock(){ synchronized (LOCK){ try { Thread.sleep(1000000); }catch (Exception e){ } }}
执行以上程序,使用jstack可以看到如下结果:
可以看到线程1的状态是BLOCKED,线程2的状态是TIMED_WAITING
4.WAITING:由于调用了Object.wait、Thread.join或者LockSupport.park方法处理等待其他线程唤醒的状态
5.TIMED_WAITING:指定等待时间的等待状态
6.TERMINATED:已经完成的线程
Thread thread = new Thread(new Runnable() { public void run() { } }); thread.start(); try { thread.join(); }catch (Exception e){ } System.out.println(thread.getState().name());
以上代码执行结果:TERMINATED
参考:java.lang.Thread.State
2.同步和异步
同步和异步是用来行用方法调用的两个词,同步调用一个方法时,只有在方法执行结束之后才会返回执行后面的代码,而异步调用时候,无论调用的方法有没有执行完,调用的线程都会返回继续执行后面的代码。
3.阻塞和非阻塞
阻塞和非阻塞我认为是和同步和异步同一种概念针对不同对象的两种说法,前者是针对线程而讲的,当多个线程访问共享资源,当有一个线程正在访问,而其他线程正在等待的状态就称为阻塞。反之为非阻塞。最常见的阻塞现象是添加synchronized关键字。
阅读全文
0 0
- 并发基本概念介绍
- 并发基本概念
- linux内核并发基本概念
- web服务器 并发 基本概念
- java并发编程:基本概念
- Java并发编程 - 基本概念
- 并发中的一些基本概念
- web服务器 并发 基本概念
- 【Java并发编程】基本概念
- 并发编程的基本概念
- 并发介绍
- C++并发编程:一、基本概念
- 三层开发基本概念介绍
- 三层开发基本概念介绍
- UNIX基本概念介绍
- 三层开发基本概念介绍
- James基本概念介绍
- STAF基本概念介绍
- 【编程语言学习】C++ Primer 对constexpr 和常量表达式的讲解
- HashMap的实现原理
- C 一一 static和extern关键字详解
- 使用python fit,predict出现的错误
- 读取excel文件信息实例2
- 并发基本概念介绍
- python基础——函数编程
- javascript随机数
- Surrounded_Regions
- 混合云起航
- HDU5493 Queue(线段树)
- ubuntu安装redis及使用
- 防盗链的基本原理与实现
- eclipse下常用快捷键