The Java™ Tutorials — Concurrency :The SimpleThreads Example SimpleThreads案例
来源:互联网 发布:榆林广电网络 编辑:程序博客网 时间:2024/06/01 10:50
The Java™ Tutorials — Concurrency :The SimpleThreads Example SimpleThreads案例
原文地址:https://docs.oracle.com/javase/tutorial/essential/concurrency/simple.html
关键点
- 理解文中的案例
全文翻译
The following example brings together some of the concepts of this section. SimpleThreads consists of two threads. The first is the main thread that every Java application has. The main thread creates a new thread from the Runnable object, MessageLoop, and waits for it to finish. If the MessageLoop thread takes too long to finish, the main thread interrupts it.
下面的案例会将本课时的几个概念结合起来。SimpleThreads由两个线程组成。首先是主线程,这个每个Java程序都有。主线程利用Runnable对象创建了一个新线程MessageLoop,并等待直到新线程完成。如果MessageLoop线程占用了太长时间,那么主线程就会中断它。
The MessageLoop thread prints out a series of messages. If interrupted before it has printed all its messages, the MessageLoop thread prints a message and exits.
MessageLoop线程会打印出一些列消息。如果中断在消息打印完之前发生,那此线程就会打出一条信息并退出。
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!");
}
}
- The Java™ Tutorials — Concurrency :The SimpleThreads Example SimpleThreads案例
- The Java™ Tutorials — Concurrency :前言
- The Java™ Tutorials — Concurrency :Executors
- The Java™ Tutorials — Concurrency :A Synchronized Class Example 一个同步类的例子
- The Java™ Tutorials — Concurrency :Thread Objects 线程对象
- The Java™ Tutorials — Concurrency :Interrupts 中断
- The Java™ Tutorials — Concurrency :Joins 插入
- The Java™ Tutorials — Concurrency :Synchronization 同步
- The Java™ Tutorials — Concurrency :Thread Interference 线程冲突
- The Java™ Tutorials — Concurrency :Synchronized Methods 同步方法
- The Java™ Tutorials — Concurrency :Atomic Access 原子访问
- The Java™ Tutorials — Concurrency :Liveness 活跃度
- The Java™ Tutorials — Concurrency :Deadlock 死锁
- The Java™ Tutorials — Concurrency :Guarded Blocks 保护块
- The Java™ Tutorials — Concurrency :Lock Objects 锁对象
- #The Java™ Tutorials — Concurrency :High Level Concurrency Objects 高并发对象
- The Java™ Tutorials — Concurrency :Processes and Threads 进程和线程
- The Java™ Tutorials — Concurrency :Defining and Starting a Thread 线程的定义和启动
- iOS --- 本地推送通知 UILocalNotification
- Hadoop mapreduce原理学习
- hadoop 配置项的调优
- (windows) Android ffmpeg 移植 cygwin+ndk-r8e+win7
- SERVLET体系结构和层次结构
- The Java™ Tutorials — Concurrency :The SimpleThreads Example SimpleThreads案例
- 沉寖式状态栏
- JAVA键盘事件监听(1)
- 初学者报道(3) CRF 中文分词解码过程理解
- 软考嵌入式系统工程师知识点整理(网络与通信)
- vx中的prjConfig.c
- 欢迎使用CSDN-markdown编辑器
- android第一屏和一到引导界面
- Centos系统搭建tomcat8和tomcat9