`
husituo
  • 浏览: 27851 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

thread interrupt 官方代码例子

阅读更多
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!");
    }
}

分享到:
评论

相关推荐

    Java中interrupt的使用.docx

    在这个例子中,当主线程调用`testThread.interrupt()`时,目标线程的中断标志被设置。在`run()`方法的循环中,线程会检查自己的中断状态。一旦检测到中断,它就会退出循环,从而结束线程的执行。如果不采取任何行动...

    Java线程的简单例子

    线程的暂停通常使用suspend()和resume(),但这些方法存在死锁风险,因此现在多使用Thread类的interrupt()方法配合isInterrupted()或InterruptedException来实现线程的暂停和恢复。 线程同步是解决多线程间数据安全...

    java中线程的应用例子

    9. **中断线程**:线程可以通过`interrupt()`方法请求中断,但这并不立即终止线程,而是设置一个中断标志。线程内部需要检查这个标志并适当地响应中断请求。 总的来说,理解和掌握Java中的线程应用是成为熟练Java...

    多线程例子

    - **中断和异常**:线程可以通过`interrupt()`方法请求中断,而`isInterrupted()`和`InterruptedException`用于检测和处理中断状态。 在`ConcurrentExample`这个压缩包文件中,可能包含了一些示例代码,演示了上述...

    多线程程序小例子实现

    2. 使用interrupt():调用线程的interrupt()方法,向线程发送中断请求。但这并不会立即停止线程,而是让线程在适当的地方(如阻塞在I/O操作上)检查中断标志并决定如何响应。 3. 使用volatile变量:通过共享的...

    一个java多线程的例子.doc

    在给出的代码示例中,展示了如何通过两种方式创建和管理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 ...

    java 多线程例子

    线程可以通过调用`interrupt()`方法请求中断,而其他线程可以通过检查`isInterrupted()`或`interrupted()`方法来响应中断请求。 六、线程优先级 Java提供了10个线程优先级,从Thread.MIN_PRIORITY(1)到Thread.MAX_...

    一个简单的多线程例子,启动线程与终止线程。

    此外,Thread类还提供了interrupt()方法来发送中断请求,但这并不一定会立即停止线程,而是在线程检查中断状态(如在sleep(), wait(), join()等阻塞方法中)时抛出InterruptedException。 除了基本的线程操作,了解...

    java线程强制停止的两个Demo

    在这个例子中,当主线程调用`thread.interrupt()`时,`run()`方法中的`isInterrupted()`检查将返回true,导致循环结束,线程执行完毕后会自动关闭。 总结来说,虽然Java中`Thread.stop()`方法可以强制停止线程,但...

    Java如何中断一个正在运行的线程[整理].pdf

    Listing A展示了`Thread.interrupt()`的一个例子,其中线程在`while(!stop)`循环中运行,即使调用了`interrupt()`,线程依然会继续执行,直到循环条件改变。这说明了使用`interrupt()`方法需要配合线程内部的中断...

    Java 实例 - 终止线程源代码+详细指导教程.zip

    本教程提供的源代码实例可能包括了使用`interrupt()`方法、`Future.cancel()`以及`ExecutorService`的示例,展示了如何优雅地终止线程。通过实际操作和调试这些例子,你可以更好地理解线程终止的原理和最佳实践。 ...

    java多线程Thread的实现方法代码详解

    本篇文章将详细解析Thread类中的start()、run()、stop()、interrupt()、isInterrupted()、join()以及join(long millis)等方法。 1. **start()** `start()`方法是启动线程的核心方法。当调用一个Thread对象的`...

    java多线程例子.pdf

    标题和描述中并未直接提供关于Java多线程的具体例子,但是从给定的【部分内容】中我们可以提取和概括出多个关于Java多线程编程的知识点。 1. Java多线程基础概念: Java多线程是Java语言支持并发编程的一个重要...

    vb.net多线程例子

    在实际应用中,你还需要考虑到线程优先级、线程间通信(如使用`Join`等待线程结束,或使用`Thread.Interrupt`中断线程)以及线程生命周期管理(如`Abort`终止线程,但应谨慎使用,因为它可能导致未捕获的异常)。...

    java多线程例子.doc

    在给定的例子中,`MyThread`类继承了`Thread`,而`R`类实现了`Runnable`接口。这两种方式都可以创建线程,但在实际应用中,更推荐使用`Runnable`接口,因为它可以避免单继承的限制,使代码更加灵活。 在例子中,`...

    一个多线程ping的例子

    实现这样的功能需要线程的中断机制,如Java的`Thread.interrupt()`。 6. **主线程阻塞**:主线程不应被子线程长时间阻塞,否则会影响程序的响应性。使用`join()`方法时应谨慎,因为它会使得主线程等待所有子线程...

    java线程例子大全

    本资源“java线程例子大全”包含了十八个单元的实例代码,覆盖了Java线程操作的多个方面。 1. **线程创建** - 继承`Thread`类:创建一个新的类,该类继承自`Thread`,然后重写`run()`方法。实例化后调用`start()`...

    经典线程例子——Java线程学习指南

    Java提供了interrupt()方法来中断线程,但被中断的线程并不会立即停止,而是会在检查到中断标志时抛出InterruptedException,通常在循环中检查isInterrupted()来响应中断请求。 通过学习以上知识点,初学者可以对...

Global site tag (gtag.js) - Google Analytics