接着上一篇讲,现在来看看Thread类和线程同步问题,线程同步问题是很重要的一个知识点
Thread类
线程休眠
什么是线程休眠?
线程类Thread当中有一个static void sleep(long millis)方法,在指定的毫秒数内让当前正在执行的线程休眠
语法:
在需要休眠的线程中输入Thread.sleep(想要休眠的时间,单位:毫秒);
😭线程同步问题(重要)
同步代码(尤为重要)
基本语法结构
synchronized (同步监听对象) {
可能引发线程安全问题的代码
}
上面的结构相当于把{ }中的代码捆绑成一个整体,线程只能够一个一个的进来,执行完一个,下一 个才能进来
Demo
自定义线程类_09MyThread
1 | package com.ifueen.classdemo._09setNameRunnable_sync_code; |
测试主类
1 | package com.ifueen.classdemo._09setNameRunnable_sync_code; |
同步方法
1、就是在需要被同步的方法上面加关键字 synchronized
2、加的位置 :在返回值类型的前面
3、不需要也不能够显示的写同步监听对象
4、如果是一个非static的方法,那么同步监听对象就是this;
5、如果是static修饰的方法,那么同步监听对象就是当前方法所在的类的字节码对象
Demo
自定义线程类MyThread
1 | package com.ifueen.classdemo._11sync_method_Runnable; |
测试主类
1 | package com.ifueen.classdemo._11sync_method_Runnable; |
锁机制
语法:
lock() 表示开始上锁了
ReentrantLock r = new ReentrantLock();
r.lock();
try {
// access the resource protected by this lock
} finally {
r.unlock();
Demo
自定义线程类MyThread
1 | package com.ifueen.classdemo._13Lock_code_Runnable; |
测试主类
1 | package com.ifueen.classdemo._13Lock_code_Runnable; |