多线程
线程:是操作系统能够进行运算调度的最小单位。
优点:资源利用率更好,程序响应快;高并发
缺点:使程序设计更复杂
创建线程
创建方式:
Thread
Rannable
Callabele(需要使用Executor框架来创建线程池)
Thread的实现:
public class ThreadTest{
public static void main(String[] args){
//创建类对象
Someone so = new Someone();
//启动线程
so.strat();
}
}
class Someone extends Thread {
@Override
//重写run
public void run(){
方法体
}
}
Rannable的实现:
public class ThreadTest{
public static void main(String[] args){
//创建类对象
Someone so = new Someone();
//开启线程
Thread th =new Thread(s0);
//启动线程
th.strat();
}
class TestThred1 implements Runnable{
@Override
//重写run
public void run(){
方法体
}
}
线程的5中状态
新建
就绪
运行
就绪
死亡
线程的停止
stop和destory都可以强制中止线程,不建议使用
阻塞的方法
sleep():是程序休眠一段时间,但是会占用CPU的资源
yield():让位,优先让下一线程执行
join():使线程强行插入执行,正在执行的线程需等到插入线程执行完采能继续执行。
线程的基本信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8Q9LyHHz-1603114806809)(C:\Users\刘泽兵\AppData\Local\Temp\1603114158667.png)]
线程的缺省优先级
MAX_PRIORITY:10
- MIN _PRIORITY:1
- NORM_PRIORITY:5 -->默认优先级
线程安全
方式一:同步代码块
synchronized(同步监视器){
需要被同步的代码
}
-
说明:1.操作共享数据的代码,即为需要被同步的代码。 -->不能包含代码多了,也不能包含代码少了。
-
2.共享数据:多个线程共同操作的变量。比如:ticket就是共享数据。
-
3.同步监视器,俗称:锁。任何一个类的对象,都可以充当锁。
-
要求:多个线程必须要共用同一把锁。
方式二:同步方法
如果操作共享数据的代码完整的声明在一个方法中,我们不妨将此方法声明同步的。
关于同步方法的总结:
-
- 同步方法仍然涉及到同步监视器,只是不需要我们显式的声明。
-
- 非静态的同步方法,同步监视器是:this
作共享数据的代码完整的声明在一个方法中,我们不妨将此方法声明同步的。
- 非静态的同步方法,同步监视器是:this
关于同步方法的总结:
-
- 同步方法仍然涉及到同步监视器,只是不需要我们显式的声明。
-
- 非静态的同步方法,同步监视器是:this
- 静态的同步方法,同步监视器是:当前类本身