package demo.thread;
/**
*sleep()是静态方法,是属于类的,作用是让当前线程阻塞
*join()是使线程同步,如在某个线程里调用t.join()表示t线程执行完再执行当前线程
*interrupt()给线程设定一个标志表示该线程已被中断,但在异常捕获时将清理这个标志
*所以在catch子句中,该标志为false
*/
public class SleepJoinDemo {
public static void main(String[] args) {
Sleeper sleep1 = new Sleeper("sleep1", 1500);
Sleeper sleep2 = new Sleeper("sleep2", 1500);
Joiner join1 = new Joiner("join1", sleep1);
Joiner join2 = new Joiner("join2", sleep1);
sleep2.interrupt();
}
}
class Sleeper extends Thread {
// 可以传参设定睡眠时间
private int sleepTime;
public Sleeper(String name, int sleepTime) {
super(name);
this.sleepTime = sleepTime;
start();// 在构造方法中启动
}
@Override
public void run() {
try {
sleep(sleepTime);
} catch (InterruptedException e) {
System.out.println(getName() + " was interrupted.\n"
+ "isInterrupted():" + isInterrupted());
return;
}
System.out.println(getName() + " has awakened");
}
}
class Joiner extends Thread {
private Sleeper sleeper;
public Joiner(String name, Sleeper sleeper) {
super(name);
this.sleeper = sleeper;
start();
}
public void run() {
try {
sleeper.join();//合并,异步变同步
} catch (InterruptedException e) {
System.out.println("interrupted");
}
System.out.println(getName() + " join completed");
}
}
- 浏览: 256442 次
- 性别:
- 来自: 北京
-
最新评论
-
我在路上看风景:
反复看了几多遍,才明白。
Spring Security3.1例子 -
ganbo:
...
CXF的三种发布方式和客户端调用方法 -
ganbo:
...
CXF的三种发布方式和客户端调用方法 -
蓝aiq冰:
非常感谢,解决了大问题
Description Resource Path Location Type ...project facets version -
安东源:
...
spring3.0多文件上传
相关推荐
线程的基本概念、线程类、任务类、线程优先级、sleep()方法(休眠)、yield()方法(礼让)、join方法(合并)、interrupt()方法(中断),线程的生命周期 线程 与 进程 的关系:**有一个进程中至少包含一个线程 **...
通常,当线程在执行阻塞操作(如 `sleep()`, `join()`, 或者 I/O 操作)时,检查到中断标志并抛出异常是最常见的处理方式。开发者需要捕获这个异常并进行相应的清理工作,以便线程可以优雅地结束。 接下来,我们看 ...
下面是一个简单的示例,展示了如何使用`interrupt`方法中断正在执行`sleep`方法的线程: ```java package com.pbteach.thread; public class MyThread extends Thread { @Override public void run() { for (int...
通过调用线程的 `interrupt()` 方法可以提前终止 `Thread.sleep()` 的执行,从而使得线程提前从阻塞状态回到可运行状态。 #### 使用场景 - **线程调度**: 当一个线程需要在一段时间后执行某项任务时,可以通过 `...
当线程由于被调用了sleep(), wait(), join()等方法而进入阻塞状态;若此时调用线程的interrupt()将线程的中断标记设为true。由于处于阻塞状态,中断标记会被清除,同时产生一个InterruptedException异常。将...
如果线程正在阻塞(例如在调用`Thread.sleep()`, `Thread.join()`, 或者`Object.wait()`),这些方法在检测到中断状态时会抛出`InterruptedException`,并清除中断状态。这意味着线程必须自行处理`...
例如,如果线程在等待对象的`wait()`方法,调用`sleep()`,或者在`join()`其他线程,那么这些方法在检测到中断状态时会抛出`InterruptedException`。这使得线程有机会捕获异常并采取适当的行动,通常这意味着结束...
本示例着重讲解几个关键的线程方法,包括`Abort`,`Join`,`Sleep`,`Interrupt`以及`Start`,这些都是在实际开发中频繁使用的功能。 1. **Start方法**: `Thread.Start`方法用于启动新创建的线程。当你创建了一个...
`Thread.interrupt()`方法会设置线程的中断状态,并在当前线程调用`wait()`, `join()`, 或 `sleep()`时抛出`InterruptedException`。但在线程执行普通逻辑时,如循环或赋值操作,`interrupt()`并不会影响线程的执行...
- 当线程正在执行`sleep`、`wait`或者`join`等阻塞方法时,调用`interrupt`会抛出`InterruptedException`,从而使线程有机会捕获异常并退出。 - 另一种情况是,在循环中检查`isInterrupted`状态,当检测到中断时,...
JAVA 多线程 interrupt() 和线程终止方式 JAVA 多线程中,interrupt() 和线程终止方式是两个非常重要的...JAVA 多线程中 interrupt() 和线程终止方式是非常重要的概念,需要正确地使用它们来确保线程的安全和可靠性。
在以上代码中,`Thread.sleep()` 会被 `interrupt()` 中断,抛出 `InterruptedException`,然后在 `catch` 块中结束线程。 总结来说,安全地终止Java线程的最佳实践是使用退出标志或者调用 `interrupt()` 方法。而 ...
System.err.println("Who dares interrupt my sleep??"); } System.err.println("Main Finished"); } } ``` 在这个例子中,创建了一个新的线程`t`,并在`run()`方法中打印"Reading",尝试读取标准输入(`System...
当调用`Thread.sleep()`时,如果线程被中断(通过调用`Thread.interrupt()`),`sleep()`方法会提前结束并抛出`InterruptedException`。因此,通常需要在`sleep()`调用周围添加异常处理逻辑。 5. **与其他阻塞操作...
主要包括线程的生命状态检查、优先级管理、线程间通信以及一些重要的线程控制函数如`sleep()`、`interrupt()`等。 #### 一、线程生命状态检查 **方法**: `isAlive()` - **功能**: 判断线程是否还在运行。 - **...
在 Nachos 操作系统中,Condition 变量可以使用锁来实现原子性。 在实现 Condition 变量时,需要设计一个队列,用于存储等待的线程。wait 方法将线程放入等待队列中,并等待被唤醒。wake 方法将线程从等待队列中移...
推荐的方式是设置一个共享标志,让线程在检查到这个标志时自行结束,或者使用`interrupt()`配合`isInterrupted()`检查。 `ThreadDemo3`这个示例很可能包含了以上所有操作的代码实例,通过实际运行和分析这些示例,...
2. **管理join计数器:** 引入`join_counter`变量来跟踪`join()`函数被调用的次数,确保每个线程仅能被阻塞一次。 ```java Lib.assertTrue(join_counter == 0); join_counter++; ``` 3. **禁止中断操作:** 在...
- 使用`KThread.sleep()`代替信号量的`P`操作,并在挂起前和恢复后通过中断的开启和关闭来保证原子性。 - **条件变量的`wake`方法实现:** - 从线程队列中取出被挂起的线程,并使用`KThread.ready()`来唤醒该线程...