Java-模拟叫号看病(改)
- 看了这个感觉写的不太规范想了一早上吃完饭后慢慢改改好了,不过还是借鉴了一下思路
Site: https://blog.csdn.net/qq_50816785/article/details/11175688
直接上代码了
ScanThreadWork Class
package cn.thread.output;
/**
* @author Jensen
* {@data 2022/11/11}
*/
public class ScanThreadWork implements Runnable{
/**
* 重写run接口
*/
@Override
public void run() {
/**
* 实例第一个线程,然后才能设置名字,不然父子线程容易不好定义
*/
Thread master = new Thread(new ScanThreadWork());
master.setName("特殊");
/**
* 为了方便测试最终结果所以这里设置了从1开始设置了5
*/
for (int i = 1; i <= 5 ; i++) {
/**
* 这里的输出一定要在上面,我吧这个print放在下面其实代码没有问题
* 就是代码先后顺序也是影响最后结果的重要因素
*/
System.out.println(master.getName()+"-目录扫描 "+i);
try {
/**
* 每次循环睡眠两秒
*/
Thread.sleep(2000);
}catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
/**
* 这里是直接方便测试这边代码所以在这里也写了个main
* 觉得没用可以直接删掉
* ScanThreadWork start = new ScanThreadWork();
* start.run();
*/
}
}
2. ScanThreadRun Class
package cn.thread.output;
/**
* @author Jensen
* {@data 2022/11/11}
*/
public class ScanThreadRun {
public ScanThreadRun() {
//System.out.println("hello");
/**
* 实例第二个线程并设置名字
* 这里有一点是ScanThreadWork最好是阻断的代码写在继承接口的类里面
* 这样后续就好join一些。。。目前水平理解
*/
Thread run = new Thread(new ScanThreadWork());
/**
* 设置名字需要这样子单独设置我靠晕了
* run.setName("test"); //这样居然不行
*/
Thread.currentThread().setName("普通");
run.start();
for (int i = 1; i <= 50;i++) {
/**
* 这里循环每次就停止一秒
*/
try {
Thread.sleep(1000);
}catch (InterruptedException e) {
e.printStackTrace();
}
/**
* 再循环到第五次的时候进行阻断先运行名为"特殊线程"
*/
if (i == 5) {
try {
run.join();
}catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 最后在继续名为"普通线程"的工作
*/
System.out.println(Thread.currentThread().getName() + "-目录扫描"+i);
}
}
public static void main(String[] args) {
/**
* 直接new实例运行
*/
new ScanThreadRun();
}
}