线程学习笔记(一)

多线程程序扩展了多任务操作的概念,它将多任务操作降低一级来运行,那就是各个程序似乎是在同一个时间内执行了多个任务。每个任务通常称为一个线程,它是控件的线程的简称。

 

可以将每个线程是为是在一个不同的环境中运行的,也就是说这些环境看上去好像是每个线程都有自己的cpu一样,该cpu配有寄存器、内存和他自己的代码。

 

java创建线程的方法:

1、继承Thread类

应用这种形式创建线程对象时不用给出任何参数。继承Thread类最重要的是要重写run()方法,称为线程体,它是整个线程的核心,线程所要完成的任务都要定义在线程体中,实际上不同功能的线程之间的区别就在于线程体的不同。

 

2、实现Runnable接口

这种方法主要就是继承Runnable接口,并且去实现run()方法,在创建线程的时候,需要先声明一个接口,然后传给线程类中,这样子来创建。

 

 

这两种创建方式的比较:

1、java是单继承的,如果继承了Thread,就不可以继承其他的类,因此会使用继承接口的方式

 

 

 

 

线程的调度:

1、New Thread状态

线程已经被创建、实例化完毕,但还未启动,此时线程体(run()方法)未被执行;当线程已经启动时,线程调度器可为其分配cpu空间

 

2、Runnable状态

处于可运行但尚未得到cpu时间的状态,调用了start()方法之后,为该线程完成登记工作和分配资源工作,此时该线程处于Runnable状态。

 

3、Running状态

线程调度器为其分配了cpu时间,处于运行状态,该状态可与其他状态进行转换。

 

4、Wait/Block状态

等待某个时间发生,一旦发生之后就离开该状态,进入Runnable状态。通常在调用sleep或wait方法时进入该状态,I/O阻塞时也可能进入该状态,或者发生在多线程同步访问时。

 

5、Dead状态

run方法执行完毕后,线程就处于Dead状态了,非预期的异常也会导致run方法的终止。死亡的线程不可重新启动,此时的线程对象与普通对象没有区别。

 

6、离开阻塞状态

如果一个线程进入了sleep状态,那么直到所规定的毫秒数结束,才能离开该状态,进入Runnable状态;

如果I/O阻塞,则等操作完成后才能离开该状态;

当一个线程调用了wait方法,那么只能有另一个线程调用notify或者notifyAll方法才能离开该状态;

如果因为多线程同步引起阻塞,则需要得到对象锁时才能离开该状态。

 

 

 

线程的启动:

t.start();

 

结束线程:

1、自然消亡:run方法结束

2、强制死亡:stop方法

 

 

线程交互:

为了让线程对一个对象调用wait()或者notify(),线程必须锁定那个特定的对象,这时候就需要使用同步机制加以保护。也就是说,只能在它们被调用的实例的同步块内使用wait()和notify()。在调用这些方法时,必须保证持有该对象的锁定标志。

 

 

挂起线程:

sleep():此方法是一个使线程暂时停止执行一段时间的方法。在sleep时间间隔期满后,线程通常不是立即恢复执行。因为此时,其他线程可能正在运行而且没有被调度为放弃执行,除非有以下几种情况发生:

1、这个被唤醒的线程具有更高的优先级

2、正在运行的线程因为其他原因而阻塞

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值