java跨线程操作系统_java 多线程 线程的状态和操作系统中进程状态的对应关系...

一 java中的线程

操作系统的进程五个状态:新建,就绪,运行,等待,结束

线程一共有六种状态

TERMINATED   结束 包括正常结束和异常结束

NEW                  新建状态 也就是对象创建了,但还没执行start方法

BLOCKED         锁池状态(也有说是阻塞状态) 等待的一种,特指等着获得锁,也就是被堵在syn方法外面。被挂到锁对象的阻塞队列上了

WAITING          等待事件发生,常常使用wait()方法 进入此状态,挂到锁对象的等待队列上。。

TIMED_WAITING  跟等待状态差不多,只不过时间到了,就进入可运行状态了(但是随之就有可能因为没抢到锁,到锁池状态)

以上三个状态个人认为都是操作系统中的 等待(阻塞)状态

RUNNABLE     可运行状态   是操作系统中就绪状态和运行状态 (这里找到官方描述:处于 runnable 状态下的线程正在 Java 虚拟机中执行,但它可能正在等待来自于操作系统的其它资源,比如处理器。 )

做了个测试 一个线程 执行Scanner scanner = new Scanner(System.in);  发现此线程处于runnalbe状态。。。

总结: java线程把就绪和运行合为一个状态---可运行 另外比如读文件 输入输出等操作  在java中都被定义为可运行状态;同时把等待分成三个状态 等待 ,阻塞(锁池) ,定时等待;

但是java中的线程状态,我的理解是为了方便java编程者更好的进行并发编程。。实际上通过jvm的映射 最终的线程状态还是通过操作系统的状态实现。

二 demo

以下的这一段代码可以更好的体现   这几种状态 当然0,1,2,3的顺序可能不一致,看调度结果

public class Main {

private static int i = 0;

static class MyThread extends Thread{

@Override

public void run() {

try {

get();

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

public static void main(String[] args) throws InterruptedException {

Thread[] arr = new Thread[10];

arr[0] = new MyThread();

arr[1] = new MyThread();

arr[2] = new MyThread();

arr[3] = new MyThread();

arr[4] = new MyThread();

arr[0].start();

arr[1].start();

arr[2].start();

arr[3].start();

Thread.currentThread().sleep(1000); //主线程等一下 让四个子线程先执行

System.out.println(arr[0].getState()); //BLOCKED 第四名 没抢到锁 锁池状态

System.out.println(arr[1].getState()); //WAITING 第一名 抢到锁 进入等待状态

System.out.println(arr[2].getState()); // TIMED_WAITING 第三名 进入定时等待状态

System.out.println(arr[3].getState()); //TERMINATED 第二名 直接return 结束

System.out.println(arr[4].getState()); //还没start

System.out.println(Thread.currentThread().getState()); // 主线程 运行状态

}

public static synchronized void get() throws InterruptedException {

i++;

if(i==1)

Main.class.wait(); //第一次进入 等待

if(i==2)

return; //第二次进入 直接返回

Thread.currentThread().sleep(1000*5); // 第三次进入超时等待

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值