Java多线程编程
2017-03-03 本文已影响0人
禹雪
线程:程序中单独顺序的控制流,线程本身依靠程序进行运行,线程是程序中的顺序控制流,只能使用分配给程序的资源和环境。
进程:执行中的程序,一个进程至少要包含一个线程。
单线程:程序中只存在一个线程,实际上主方法就是一个主线程。
多线程:多线程是在一个程序中运行多个任务,多线程目的是更好的使用CPU资源。
二、线程的实现
线程的实现2种:
继承Thread类
实现Runnable接口
Thread类:
Thread类是在java.lang包中定义的,继承Thread类必须重写run()方法。
定义格式:
class className extends Thread{
run(){
//此处重写run方法
};
}
在实例中,我们测试了run()方法和start()方法,运行情况说明线程的启动一定不是通过run()方法的,没有并行机制,A执行完再执行B。start()方法执行过程中是并行的,哪个抢占资源运行哪个。
Runnable接口:
public class MyRunnable implements Runnable{
run(){
//重写run方法
};
}
三、线程的状态
创建状态:准备好了一个多线程的对象
就绪状态:调用了start()方法,等待CPU进行调度
运行状态:执行run()方法
阻塞状态:暂时停止执行,可能将资源交给其他线程使用
终止状态(死亡状态):线程销毁
四、线程常用方法
Thread类中:
1.取得线程名称 getName()
2.取得当前线程对象 currentThread()
3.判断线程是否启动 isAlive()
4.线程的强行运行 join() 需要使用try catch来捕获InterruptedException异常
5.线程的休眠 sleep() 异常捕获同上 示例中在run方法中实现
6.线程的礼让 yield() 示例中也在run方法中定义
五、线程的优先级
1.优先级顺序设置
1 - MIN_PRIORITY
10 - MAX_PRIORITY
5 - NORM_PRIORITY
默认状态下值为5
Thread.setPriority()设置优先级,设置为MAX_PRIORITY的线程并不一定可以最先运行,是一种可能状态,有优势。
六、线程同步
1.同步代码块
在代码块上加上“synchronized”关键字,则此代码块就成为同步代码块。资源共享的时候使用同步。
2.同步代码块的格式:
synchronized(同步对象) {
需要同步的代码块;
}
3.同步方法
除了代码块可以同步,方法也是可以同步的
4.方法同步格式:
synchronized void 方法名称() {}
5.死锁
七、线程的生命周期
线程的生命周期.png