package practice;
public class Chp12_4_2 {
public static void main(String args[]){
ClassRoom classroom = new ClassRoom();
classroom.student1.start();
classroom.student2.start();
classroom.teacher.start();
}
}
class ClassRoom implements Runnable{
Thread student1,student2,teacher;
ClassRoom(){
student1 = new Thread(this);
student2 = new Thread(this);
teacher = new Thread(this);
}
public void run(){
if(Thread.currentThread()==student1){
System.out.println("学生甲正在睡觉");
try {
Thread.sleep(10*60*1000);
} catch (InterruptedException e) {
System.out.println("学生甲开始上课");
student2.interrupt();
}
}
else if(Thread.currentThread()==student2){
System.out.println("学生乙正在睡觉");
try {
Thread.sleep(60*60*1000);
} catch (InterruptedException e) {
System.out.println("学生乙开始上课");
}
}
else if(Thread.currentThread()==teacher){
try{
for(int i=1;i<=3;i++){
System.out.println("上课!");
Thread.sleep(1000);
}
}
catch(InterruptedException e){}
student1.interrupt();
}
}
}
我希望的结果是:
学生甲正在睡觉
学生乙正在睡觉
上课!
上课!
上课!
学生甲开始上课
学生乙开始上课
事实是每次执行后输出顺序都不一样
求解
那怎么改可以得到我想要的结果?
本回答被提问者采纳Java中用到的线程调度算法是什么?
Java中的线程调度算法主要是基于优先级的抢占式调度。这种调度算法确保了高优先级的线程总是优先于低优先级的线程执行,同时也允许相同优先级的线程按照先进先出(FIFO)的顺序执行。在Java中,每个线程都有一个优先级,范围从1到10,其中1表示最低优先级,10表示最高优先级。当一个线程被创建时,它的...
Java 如何同步顺序执行多个线程
顺序:我们可以用List来解决,因为它是有序的。我们只需要将要执行的线程放入到List中 上代码:\/ 让多个线程同步顺序执行的线程管理器 author bianrx date 2012.1.18 SynchronizedRunMultiThread \/ public class SyncManager { \/ 待执行的线程集合,注意这里必须是Runnable接口类型,下面会解释 \/ private ...
关于循环的执行顺序问题(java)
在Java里 程序的执行顺序 和串行程序 和并行程序有关 串行程序(单线程程序)执行顺序是调用代码块的从上到下执行 循环{} 是按照循环的次数依次在代码块内由上而下的执行。并行程序(多线程并发)CPU\/JVM 存在指令重排序的优化,即会对互不影响上下文的程序进行重排序操作,这时候顺序就指不定了,但...
JAVA线程的题目 求大神解答
1、线程的实现方式有两种一种是继承Thread一种是实现Runable。2、优先级设置和获取的示例如下:3、执行结果 线程根据优先级执行并不根据调用代码的先后。
JAVA多线程优先级如何运行。
书上说的的情况大多是在单核处理器上,但不完全对,那个线程会执行,完全取决于操作系统,操作系统有自己的处理机制,Java会跟操作系统商量,优先级高的线程比优先级低的线程先执行的概率相对高一些,但不是绝对的,有时候优先级低的会先执行,完全取决于操作系统;对于双核处理器,优先级高的线程比优先...
java 线程当前任务未执行完毕,会执行一个新的任务吗?
在 Java 中,当一个线程正在执行任务时,如果另一个任务需要执行,则会根据线程的调度策略决定是否执行新的任务。如果线程的调度策略是单线程执行,则线程会一直执行当前任务,直到完成为止,不会执行新的任务。如果线程的调度策略是多线程执行,则线程可能会在执行完当前任务后,执行新的任务。Java 中的...
java,为什么其他线程总是在main线程后执行?
一个java程序从main开始之后,进程启动,为整个程序提供各种资源,而此时将启动一个线程,这个线程就是主线程,它将调度资源,进行具体的操作。Thread、Runnable的开启的线程是主线程下的子线程,是父子关系,此时该java程序即为多线程的,这些线程共同进行资源的调度和执行。java中main方法启动的是一个进程...
java 多线程按指定顺序轮流执行!!
难点1:如何保证线程按ABCD这样的顺序启动 难点2:如何保证线程一直按ABCD这样的顺序执行 做了一个简单的程序,执行结果是可以的,但是这样的缺点是完全没有发挥多线程的优势,程序代码如下,也请高手指点指点。\/\/用于产生从1到100的数 package org.ghand.thread.tfive;public class Sequence { private ...
如何让线程按指定顺序执行
- 创建三个线程T1、T2、T3,确保它们按顺序执行。- 在T2的run方法中调用t1.join(),确保T1执行完成后才执行T2。- 在T3的run方法中调用t2.join(),确保T2执行完成后才执行T3。4. 示例代码:```java public class ThreadByOrder { static Thread t1 = new Thread(new Runnable() { Override pu...
关于java中线程(Thread)问题?
也就是等待调用该方法的线程执行完毕后再往下继续执行。注意该方法也要捕获异常。3.wait()wait方法用于协调多个线程对共享数据的存取,所以必须在Synchronized语句块内使用wait方法 wait()方法使当前线程暂停执行并释放对象锁标志 参考资料:http:\/\/gatusso52.javaeye.com\/blog\/483973 ...