关闭

JAVA线程

125人阅读 评论(0) 收藏 举报

一.线程状态

1.创建状态
使用new运算符创建一个线程后,该线程仅仅是一个空对象,系统没有分配资源,称该线程处于创建状态(new thread)

2.可运行状态
使用start()方法启动一个线程后,系统为该线程分配了除CPU外的所需资源,使该线程处于可运行状态(Runnable)

3.运行中状态

java运行系统通过调度选中一个Runnable的线程,使其占有CPU并转为运行中状态(Running).此时,系统真正执行线程的run()方法.

4.阻塞状态
一个正在运行的线程因某种原因不能继续运行时,进入阻塞状态(Blocked),如sleep,wait等等

5.死亡状态
线程结束后是死亡状态(Dead)

二.线程实现方式

1. 继承Thread类(适用于单重继承情况)

2.实现Runable接口

三.线程中断

错误观点:使用interrupt()来中断线程

例如,线程B调用线程A的interrupt(),将中断标志置位,在线程中A使用isInterrupted()判定,

并将中断标志复位,中断线程A。但是,当线程A处于阻塞状态时,B线程调用A线程的interrupt()方法,

会抛出中断异常,此时,中断标志位被复位,interrupt()没有了效果。

正确观点:使用共享变量来控制(使用修饰符volatile 或将变量的访问放在同步代码块中)线程的中断

四.wait方法和notify方法

wait方法和notify()方法的使用一般情况是相互对应的,即用了wait方法,就应该有notify方法。

例如,A,B线程共享C对象,A线程调用wait方法是阻塞自己,并且释放对象锁,B线程调用C对象notify方法唤醒A线程(如果只存在A,B两个线程的话),若不唤醒A线程,A线程将一直

阻塞下去,直到被中断。

五.synchronized关键字的理解

1.synchronized首选是获得对象的锁(每个对象只有一把锁),然后同步所有利用该对象的锁进行同步的代码块

2.static synchronized

 synchronized作用于static 函数,这等同于在方法内部使用synchronized(Foo.class) ,使用与该类所有对象实例的同步代码块

3.只是想让一段代码同步时,可以创建一个特殊的instance变量(它得是一个对象)来充当锁(零长度的byte数组对象创建起来将比任何对象都经济)

六.yield和join方法

yield方法是使当前线程放弃执行机会,进入可执行状态

join方法是当前线程将当前线程进入阻塞状态,让被调用线程执行,当被调用线程执行完后,进入可执行状态

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34872次
    • 积分:526
    • 等级:
    • 排名:千里之外
    • 原创:17篇
    • 转载:30篇
    • 译文:0篇
    • 评论:1条
    最新评论