2011-09-06周二

 

十三、章多线程

第二节线程的生命周期及线程的同步

一、     线程的生命周期

线程的生命周期包含5个状态

1、          新建状态(New)

代表;线程的对象对象已经创建,但是还没有启动,准备工作已经完成。只有程序员调用start()方法,否则线程将保持新建状态而不会运行。

2、          就绪状态(Runnable)

当调用start()方法时,该线程进入就绪状态(只是线程目前处于的状态,如果系统没有能力拔出cpu执行时间给线程,线程就不执行)

3、          运行状态(Run)

线程的正常执行状态,处于该状态的线程在CPU内部执行。

4、          阻塞状态(Block)

线程处于执行状态,但是由于没有获得CPU的执行时间,而处于CPU外部等待线程执行的状态。

5、          终止状态(Dead)

1自然撤销:线程正常退出。

2被停止:应用程序因故障停止运行时,系统将终止给程序的所有线程。

二、     线程的调度

1、睡眠线程sleep()

Sleep()方法使当前线程睡眠(停止执行)若干秒,睡眠时间过后线程再次进入可运行状态。

2、暂停线程yield()

     Yield()方法可以暂停当前线程执行,将CPU资源让出来,允许其他线程执行。该线程仍处于可运行状态,不转变为阻塞状态。Yield()方法的优点是保证有工作时不会让CPU闲置,主要用于编写多个合作线程,也适用于强制线程的合作。

3、连接线程join()

调用join()方法可以使当前线程暂停执行,等待调用该方法的线程结束后再执行本行本线程。

4、中断线程interrupt()

为线程设置一个中断标记以便于run()方法时使用isInterrupted()方法能够检测到。

void run()   //创建该类的子类时必须实现的方法

void start() //开启线程的方法

static void sleep(long t) //释放CPU的执行权,不释放锁

static void sleep(long millis,int nanos)

final void wait()//释放CPU的执行权,释放锁

final void notify()

static void yied()//可以对当前线程进行临时暂停(让线程将资源释放出来)

三、     线程的同步

线程间共享代码和数据可以节省系统开销,提高程序运行效率,但同时也导致了数据的“访问冲突”问题,如何实现线程间的有机交互、并确保共享资源在某些关键时段只能被一个线程访问,即所谓的“线程同步”(Synchronization)就变得至关重要。

public class Stack {

       private char[] data=new char[10];

       private int index=0;

       public void push(char ch){

              data[index]=ch;

              System.out.println("压入字符"+ch+"-->");//p1

              index++;

              System.out.println("-->压入"+ch+"操作完成!");

       }

       public char pop(){

              index--;

              return data[index];

       }

四、互斥锁

每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。

Java对象默认是可以被多个线程共用的,只是在需要时才启动“互斥锁”机制,成为专用对象。

关键字synchronized用来与对象的互斥锁联系

当某个对象用synchronized修饰时,表明该对象已启动“互斥锁”机制,在任一时刻只能由一个线程访问,即使该线程出现堵塞,该对象的被锁定状态也不会解除,其他线程任不能访问该对象。

ü      用在对象前面限制一段代码的执行(同步代码块
public void push(char c){
      sychronized(this){
             data[index]=c;
             index++
      }
}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值