sleep不会释放锁,你在36行那块的sleep加不加没什么影响,你加了sleep,只是暂停了当前的执行的线程,当前线程还是占领cpu资源的,结束后依旧执行的是刚刚暂停的进程,想要模拟网络延迟可以像其他人说的一样,加sleep放在锁的外面
为什么代码没问题,却一直执行第一个线程?
package ccc;
import java.util.concurrent.locks.ReentrantLock;
public class LockTest {
public static void main(String[] args) {
Window w1 = new Window();
Thread a = new Thread(w1);
Thread b = new Thread(w1);
Thread c = new Thread(w1);
a.setName("窗口");
b.setName("移动");
c.setName("黄牛");
a.start();
b.start();
c.start();
}
}
class Window implements Runnable{
private int ticket = 100;
private ReentrantLock lock = new ReentrantLock();
@Override
public void run() {
while(true) {
try {
lock.lock();
if (ticket > 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + ticket);
ticket--;
} else {
break;
}
}finally {
lock.unlock();
}
}
}
}
"D:\Program Files\Java\jdk1.8.0_231\bin\java.exe" "-javaagent:D:\JAVA学习\idea\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=60585:D:\JAVA学习\idea\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath "D:\Program Files\Java\jdk1.8.0_231\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\deploy.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\access-bridge-64.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\cldrdata.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\dnsns.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\jaccess.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\jfxrt.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\localedata.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\nashorn.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunec.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunjce_provider.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunmscapi.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\sunpkcs11.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\ext\zipfs.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\javaws.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\jce.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\jfr.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\jfxswt.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\jsse.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\management-agent.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\plugin.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\resources.jar;D:\Program Files\Java\jdk1.8.0_231\jre\lib\rt.jar;D:\JAVA学习\SGG\2020最新学习路线图\out\production\diedline" day2.LockTest
窗口:100
窗口:99
窗口:98
窗口:97
窗口:96
窗口:95
窗口:94
窗口:93
窗口:92
窗口:91
窗口:90
窗口:89
窗口:88
窗口:87
窗口:86
窗口:85
窗口:84
窗口:83
窗口:82
窗口:81
窗口:80
窗口:79
窗口:78
窗口:77
窗口:76
窗口:75
窗口:74
窗口:73
窗口:72
窗口:71
窗口:70
窗口:69
窗口:68
窗口:67
窗口:66
窗口:65
窗口:64
窗口:63
窗口:62
窗口:61
窗口:60
窗口:59
窗口:58
窗口:57
窗口:56
窗口:55
窗口:54
窗口:53
窗口:52
窗口:51
窗口:50
窗口:49
窗口:48
窗口:47
窗口:46
窗口:45
窗口:44
窗口:43
窗口:42
窗口:41
窗口:40
窗口:39
窗口:38
窗口:37
窗口:36
窗口:35
窗口:34
窗口:33
窗口:32
窗口:31
窗口:30
窗口:29
窗口:28
窗口:27
窗口:26
窗口:25
窗口:24
窗口:23
窗口:22
窗口:21
窗口:20
窗口:19
窗口:18
窗口:17
窗口:16
窗口:15
窗口:14
窗口:13
窗口:12
窗口:11
窗口:10
窗口:9
窗口:8
窗口:7
窗口:6
窗口:5
窗口:4
窗口:3
窗口:2
窗口:1
- 点赞
- 写回答
- 关注问题
- 收藏
- 复制链接分享
- 邀请回答
7条回答
为你推荐
- ThreadPool 的shutdown问题
- java
- 1个回答
- 如何判断多个线程是否结束
- 编程语言问答
- 互联网问答
- it技术
- IT行业问题
- 计算机技术
- 0个回答
- Servlet返回响应和执行业务逻辑代码分开可行吗
- tomcat
- 0个回答
- 做了一个小时的面试题(没有过 希望大家帮忙答下 虽然很幼稚 毕竟每个人都是这么过来的吗 感激了!)
- 编程语言问答
- 互联网问答
- it技术
- IT行业问题
- 计算机技术
- 2个回答
- oracle10G 提示找不到SID
- 编程语言问答
- 互联网问答
- it技术
- IT行业问题
- 计算机技术
- 0个回答
- 请教一个关于Spring-task定时任务的问题
- stringbuilder
- task 线程
- stringbuffer
- 4个回答
- 无限滚动,transiton小bug怎么修复
- 函数
- 异步
- javascript
- 前端
- 1个回答
- 编程模拟ATM机转账时,一个账户扣钱,另一个账户加钱,中间出现中断怎么办,求大神解答
- 程序中断
- java
- 数据库
- 9个回答
- 二层爬虫程序数据获取问题?
- android
- 1个回答
- C语言写的一个实时时间小程序,用的多线程屏幕问题
- 控制台
- c
- 4个回答