JAVA线程

原创 2012年03月28日 16:12:34

一.线程状态

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方法是当前线程将当前线程进入阻塞状态,让被调用线程执行,当被调用线程执行完后,进入可执行状态

java 线程游戏 打地鼠

  • 2017年12月10日 13:58
  • 1.45MB
  • 下载

java线程.rar

  • 2017年07月26日 10:17
  • 232KB
  • 下载

50道Java线程面试题

本文由 ImportNew - 李 广 翻译自 javarevisited。欢迎加入翻译小组。转载请见文末要求。 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要...

Java工程师线程试题

  • 2015年03月25日 17:25
  • 37KB
  • 下载

Java线程.pdf

  • 2014年12月14日 16:25
  • 281KB
  • 下载

Java中的线程(十)- condition lock

Lock and Condition   Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象。两个线程执行的代码片段要实现同步互斥的效果,...

java线程

  • 2015年05月26日 14:01
  • 53KB
  • 下载

Java创建线程的三种方式及其对比

Java中创建线程主要有三种方式: 一、继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()...

java线程总结

  • 2013年05月27日 14:32
  • 8KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAVA线程
举报原因:
原因补充:

(最多只允许输入30个字)