进程:
应用程序的运行实例,是资源分配调度的基本单位。
线程:
进程中的执行单位,是cpu时间片的调度使用单位。
多线程
在同一时间执行多个任务的功能,即多线程。
多线程的优缺点
优势:
- 可以同时完成多个任务,提高CPU利用率。
- 多任务并发执行,速度更快。
- 可以随时停止任务,并设置任务优先级以优化程序性能。
缺点:
- 多线程间存在着竞争资源,比如文件、表中的一行数据、 内存空间,对资源的并发访问可能造成程序紊乱。(应对共享资源访问应进行同步或控制)
- 特殊情况下,程序的整体运行速度会减慢。
- 代码复杂度较高
多线程的实现方式
类继承java.lang.Thead 并重写run()方法
class MyThread extends Thread{
public void run(){
}
}
类实现java.lang.Runnable 并重写run()方法
class MyThread implements Thread{
public void run(){
}
}
启动线程
MyThread t = new MyThread (); t.start();
线程的生命周期
线程优先级
setPriority(int grade)
grade 的参数值
- Thread.MIN_PRIORITY=1
- Thread.MAX_PRIORITY=10
- Thread.NORM_PRIORITY=5
- 数字越大优先级越高
例如:
Dog dog = new Dog();
dog.setPriority(Thread.MAX_PRIORITY) //dog.setPriority(10)
线程调度方法
join()
阻塞当前线程,强行介入执行。夺取时间片,自己执行
sleep():
使线程停止运行一段时间,此时将处于阻塞状态
调用方法 Thread.sleep();
yield() :
出让时间片,但不会阻塞线程,转入可运行状态
调用方法 Thread.yieid()
多线程条件的问题
线程同步问题
线程同步的必要性:
当多个线程访问同一个数据时,容易出现线程安 全问题。需要进行线程同步,以保证数据安全。
线程同步:
当两个或两个以上线程访问同一资源时,需要某种方式来确保资 源在某一时刻只被一个线程使用
线程同步的实现方案
- 同步代码块
- 同步方法
同步代码块
同步代码块同一时间只可以有唯一的一个线程可以执行
具体语法
private static Object Lock = new Object();//锁的类型无要求,但是需要new 还要求唯一
synchronized(lock){
同步代码块
}
同步方法
访问修饰符 synchronized 返回类型 方法名{ }