public class SimpleThreads {
// Display a message, preceded by
// the name of the current thread
static void threadMessage(String message) {
String threadName =
Thread.currentThread().getName();
System.out.format("%s: %s%n",
threadName,
message);
}
private static class MessageLoop
implements Runnable {
public void run() {
String importantInfo[] = {
"Mares eat oats",
"Does eat oats",
"Little lambs eat ivy",
"A kid will eat ivy too"
};
try {
for (int i = 0;
i < importantInfo.length;
i++) {
// Pause for 4 seconds
Thread.sleep(4000);
// Print a message
threadMessage(importantInfo[i]);
}
} catch (InterruptedException e) {
threadMessage("I wasn't done!");
}
}
}
public static void main(String args[])
throws InterruptedException {
// Delay, in milliseconds before
// we interrupt MessageLoop
// thread (default one hour).
long patience = 1000 * 60 * 60;
// If command line argument
// present, gives patience
// in seconds.
if (args.length > 0) {
try {
patience = Long.parseLong(args[0]) * 1000;
} catch (NumberFormatException e) {
System.err.println("Argument must be an integer.");
System.exit(1);
}
}
threadMessage("Starting MessageLoop thread");
long startTime = System.currentTimeMillis();
Thread t = new Thread(new MessageLoop());
t.start();
threadMessage("Waiting for MessageLoop thread to finish");
// loop until MessageLoop
// thread exits
while (t.isAlive()) {
threadMessage("Still waiting...");
// Wait maximum of 1 second
// for MessageLoop thread
// to finish.
t.join(1000);
if (((System.currentTimeMillis() - startTime) > patience)
&& t.isAlive()) {
threadMessage("Tired of waiting!");
t.interrupt();
// Shouldn't be long now
// -- wait indefinitely
t.join();
}
}
threadMessage("Finally!");
}
}
分享到:
相关推荐
在这个例子中,当主线程调用`testThread.interrupt()`时,目标线程的中断标志被设置。在`run()`方法的循环中,线程会检查自己的中断状态。一旦检测到中断,它就会退出循环,从而结束线程的执行。如果不采取任何行动...
线程的暂停通常使用suspend()和resume(),但这些方法存在死锁风险,因此现在多使用Thread类的interrupt()方法配合isInterrupted()或InterruptedException来实现线程的暂停和恢复。 线程同步是解决多线程间数据安全...
9. **中断线程**:线程可以通过`interrupt()`方法请求中断,但这并不立即终止线程,而是设置一个中断标志。线程内部需要检查这个标志并适当地响应中断请求。 总的来说,理解和掌握Java中的线程应用是成为熟练Java...
- **中断和异常**:线程可以通过`interrupt()`方法请求中断,而`isInterrupted()`和`InterruptedException`用于检测和处理中断状态。 在`ConcurrentExample`这个压缩包文件中,可能包含了一些示例代码,演示了上述...
2. 使用interrupt():调用线程的interrupt()方法,向线程发送中断请求。但这并不会立即停止线程,而是让线程在适当的地方(如阻塞在I/O操作上)检查中断标志并决定如何响应。 3. 使用volatile变量:通过共享的...
在给出的代码示例中,展示了如何通过两种方式创建和管理Java线程:通过继承`Thread`类和实现`Runnable`接口。 首先,我们看继承`Thread`类的方法。类`ThreadUseExtends`扩展了`Thread`类,并重写了`run()`方法。当...
public class ThreadInterrupt extends Thread { public void run() { try { Thread.sleep(50000); // 延迟 50 秒 } catch (InterruptedException e) { System.out.println(e.getMessage()); } } public ...
线程可以通过调用`interrupt()`方法请求中断,而其他线程可以通过检查`isInterrupted()`或`interrupted()`方法来响应中断请求。 六、线程优先级 Java提供了10个线程优先级,从Thread.MIN_PRIORITY(1)到Thread.MAX_...
此外,Thread类还提供了interrupt()方法来发送中断请求,但这并不一定会立即停止线程,而是在线程检查中断状态(如在sleep(), wait(), join()等阻塞方法中)时抛出InterruptedException。 除了基本的线程操作,了解...
在这个例子中,当主线程调用`thread.interrupt()`时,`run()`方法中的`isInterrupted()`检查将返回true,导致循环结束,线程执行完毕后会自动关闭。 总结来说,虽然Java中`Thread.stop()`方法可以强制停止线程,但...
Listing A展示了`Thread.interrupt()`的一个例子,其中线程在`while(!stop)`循环中运行,即使调用了`interrupt()`,线程依然会继续执行,直到循环条件改变。这说明了使用`interrupt()`方法需要配合线程内部的中断...
本教程提供的源代码实例可能包括了使用`interrupt()`方法、`Future.cancel()`以及`ExecutorService`的示例,展示了如何优雅地终止线程。通过实际操作和调试这些例子,你可以更好地理解线程终止的原理和最佳实践。 ...
本篇文章将详细解析Thread类中的start()、run()、stop()、interrupt()、isInterrupted()、join()以及join(long millis)等方法。 1. **start()** `start()`方法是启动线程的核心方法。当调用一个Thread对象的`...
标题和描述中并未直接提供关于Java多线程的具体例子,但是从给定的【部分内容】中我们可以提取和概括出多个关于Java多线程编程的知识点。 1. Java多线程基础概念: Java多线程是Java语言支持并发编程的一个重要...
在实际应用中,你还需要考虑到线程优先级、线程间通信(如使用`Join`等待线程结束,或使用`Thread.Interrupt`中断线程)以及线程生命周期管理(如`Abort`终止线程,但应谨慎使用,因为它可能导致未捕获的异常)。...
在给定的例子中,`MyThread`类继承了`Thread`,而`R`类实现了`Runnable`接口。这两种方式都可以创建线程,但在实际应用中,更推荐使用`Runnable`接口,因为它可以避免单继承的限制,使代码更加灵活。 在例子中,`...
实现这样的功能需要线程的中断机制,如Java的`Thread.interrupt()`。 6. **主线程阻塞**:主线程不应被子线程长时间阻塞,否则会影响程序的响应性。使用`join()`方法时应谨慎,因为它会使得主线程等待所有子线程...
本资源“java线程例子大全”包含了十八个单元的实例代码,覆盖了Java线程操作的多个方面。 1. **线程创建** - 继承`Thread`类:创建一个新的类,该类继承自`Thread`,然后重写`run()`方法。实例化后调用`start()`...
Java提供了interrupt()方法来中断线程,但被中断的线程并不会立即停止,而是会在检查到中断标志时抛出InterruptedException,通常在循环中检查isInterrupted()来响应中断请求。 通过学习以上知识点,初学者可以对...