以下示例汇集了本节的一些概念。 SimpleThreads由两个线程组成。第一个是每个Java应用程序都具有的主线程。主线程从Runnable对象创建一个新线程MessageLoop,并等待其完成。如果MessageLoop线程花费的时间太长,则主线程会中断它。MessageLoop线程将打印出一系列消息。如果在打印所有消息之前中断,MessageLoop线程将打印一条消息并退出。
public class SimpleThreads {// Display a message, preceded by// the name of the current threadstatic void threadMessage(String message) {String threadName =Thread.currentThread().getName();System.out.format("%s: %s%n",threadName,message);}private static class MessageLoopimplements 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 secondsThread.sleep(4000);// Print a messagethreadMessage(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 exitswhile (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 indefinitelyt.join();}}threadMessage("Finally!");}}
