多线程
1、线程是进程中的一条执行路径。进程是系统中正在运行的程序。(进出是一个静态概念,线程是一个动态概念。)
2、开启一个新的线程的方法:
a、继承Thread类,并且重写Thread中的run方法。
b、实现Runnable接口。
注意:开启新线程是通过调用start方法,而直接调用run方法只是一般得方法调用。
3、线程状态的转换:
4、线程控制基本方法
isAlive()判断线程是否还“活着”,即线程是否还未终止。
getPriority()获得线程的优先级数值。
setPriority()设置线程的优先级数值。
Thread.sleep()见当前线程睡眠指定毫秒数。
join()调用某线程的该方法,将当前线程与该线程“合并”,即等待该线程 结束,再回复当前线程的运行。
yield()让出CPU,当前线程进入就绪队列等待调度。(只让一次)
wait()但其线程进入对象的wait pool。
notify()/notifyAll()唤醒对象的wait pool中的一个/所有等待线程。
注意:线程的优先级取值范围1到10,默认为5。
5、线程同步是为了防止多个线程访问同一个数据对象时,对数据造成破坏。
实现线程同步的方法:
a、代码块锁定:
synchronized(this){......}
b、方法锁定:
public synchronised void XXX(...){......}
6、线程死锁:是一种少见的、而且难于调试的错误,在两个线程对象对两个同步对象具有循环依赖时,就会出现死锁现象。