4月6日星期四

一、进程与线程

 

1、进程是程序的一次动态执行过程,它对应了从代码加载、执行至执行完毕的一个完整过程,这个过程也是进程本身从产生、发展至消亡的过程。

2、线程是比进程更小的执行单位,一个进程在其执行过程中,可以产生多个线程,形成多条执行线索,每条线索,即每个线程,也有它自身产生、存在和消亡的过程。

3、进程的并发和并行

[1、]并行:同一时刻有多条指令在多个处理器上同时执行。

[2、]并发:同一时刻只能有一条指令执行;

4、

4月6日星期四_第1张图片

二、线程属性

1、状态

(1、)新建态

(2、)就绪态

(3、)运行态

(4、)中断态

(5、)死亡态

2、优先级

[1、]1-10级默认5级。

[2、] 线程的优先级可以通过setPriority(int grade)方法调整,如果参数不在1~10范围内,那么setPriority便产生一个IllegalArgumenException异常。getPriority方法返回线程的优先级。需要注意是,有些操作系统只识别3个级别:1、5和10。

[3、]当优先级高的执行完后(死亡态)才会执行低等级的线程

三、线程的创建

1、继承Thread类重写run()方法;

2、实现Runnable接口创建多线程,

[1、]首先创建实现Runnable接口的类,重写run()方法然后,创建它的对象a用作Thread类的target,通过Thread 名字=new Thread(a)实现或new Thread(a,“线程名”).start(); 

[2、]Thread类的作用是把run()方法包装成线程执行体。

3、使用Callable接口和Future创建线程

[1、]call()方法可以有返回值和抛出异常,是作为线程执行体被调用。

[2、]并不是Runnable接口的子接口,它的实例不能直接作为target。

[3、]Future接口可以代表Callable接口里call方法的返回值,并有一个实现类FutureTask,实现了Future和Runnable接口——可作为Thread类的target.

[4、]步骤

{1、}创建Callable接口的实现类实现call()方法线程执行体有返回值,在创建它的实例。

{2、}使用FutureTask类包装Callable对象。

{3、}FutureTask的实例作为Thread对象的target创建新线程;

{4、}可通过FutureTask类的实例的get()方法获得返回值。

四、线程的一些操作

1、sleep():等待多久在继续执行。

2、wait():该线程一旦使用就要在其他线程内通过notify()或notifyAll()通知它。

3、yield():暂停该线程的执行转换成就绪态达到让步的目的。

4、join():阻塞当前线程加入其他线程执行,先完成加入线程在完成其他线程,插队时需要抛出InterruptedException异常。

五、线程的同步和锁

1、通过关键字synchronized

[1、]同步代码块

[2、]同步方法

2、Lock锁

[1、]每次只能有一个线程对Lock对象加锁,线程开始访问共享资源前应先获得Lock对象

[2、]

4月6日星期四_第2张图片

[3、]通过实例的锁对象进行加锁和释放锁

你可能感兴趣的:(java,开发语言)