第十章:多线程

第十章:多线程


程序/进程/线程

程序:为了完成某些功能而编写的有序代码的集合,程序在未运行之前是静态代码,保存在磁盘上。

进程:正在运行的程序,计算机系统分配资源的基本单位,每个进程有独立的运行内存空间,进程间切换开销较大。

线程:轻量级的进程,是任务和调度的基本单位,一个进程可以包含多个线程,线程没有独立的内存空间,共享进程的内存空间。


常见的线程的两种方式

继承java.lang.Thread类

实现java.lang.Runnable接口(推荐)

推荐使用通过实现Runnable接口来创建线程
因为java是单继承,如果通过继承Thread类实现创建线程,将无法在继承其他父类。


启动线程利用start()方法

启动线程利用start()方法,而不能直接调用run()方法


代理模式


Thread类的常用方法


getName()
setName(String)
getId()
sleep()
join()
yeild()
getPriority()
setPriority()
.....


线程的生命周期


1.新生状态

使用new关键字创建的线程
2.就绪状态

当调用start()方法时,线程具备运行条件,但尚未分配CPU资源(CPU的时间片)


3.运行状态

CPU已经分配时间片,当前线程将执行run()方法
4.阻塞状态(可选)

当调用线程休眠(sleep())或IO阻塞,阻塞解除后回到就绪状态


5.死亡状态

1.程序正常结束
2.调用stop()方法终止线程(不建议调用)


线程同步synchronized

同步:类似于排队的概念,在多线程程序中多个线程同时操作一个资源,可能会造成该资源数据的不安全或不准确的情况发生。
解决办法就让共享资源在同一时刻只能有一个线程操作。


1.同步监视器

synchornized(this){

}

如果为this表示对当前对象加锁,当前对象中所有成员就将加锁,只有当前线程操作完成后,才会解锁。


2.使用同步的方法

使用synchornized修饰的方法是同步方法
java.uitl.Timer(定时器)

java.util.Timer类:定时器,一种工具,线程用其安排以后在后台线程中执行的任务
*java.util.TimerTask类实现Runnable接口,由 Timer 安排为一次执行或重复执行的任务。
*常用的构造方法:
* Timer()创建一个新计时器。
*常用的方法:
* schedule(TimerTask task, Date time)安排在指定的时间执行指定的任务。
* schedule(TimerTask task, long delay)安排在指定延迟后执行指定的任务。
* schedule(TimerTask task, Date firstTime, long period)
* 安排指定的任务在指定的时间开始进行重复的固定延迟执行。
* schedule(TimerTask task, long delay, long period)安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。


线程通信


wait()/wait(long s)/wait(long s,int n)
notify()
notifyAll()


线程通信综合案例:生产者和消费者

原文地址:https://www.cnblogs.com/panwenshuai/p/7067276.html