The Java™ Tutorials — Concurrency :The SimpleThreads Example SimpleThreads案例
2016-02-11 11:35
549 查看
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, andwaits 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!"); } }
相关文章推荐
- java-模拟tomcat服务器
- C#多线程之Thread中Thread.IsAlive属性用法分析
- 探究在C++程序并发时保护共享数据的问题
- Nodejs实战心得之eventproxy模块控制并发
- Android开发笔记之:如何安全中止一个自定义线程Thread的方法
- java thread start()和run()方法简析
- Java中Runnable和Thread的区别分析
- Android开发笔记之:Handler Runnable与Thread的区别详解
- C#多线程之Thread中Thread.Join()函数用法分析
- Mysql Error Code : 1436 Thread stack overrun
- MySQL错误Forcing close of thread的两种解决方法
- c#线程Thread示例
- 浅析PHP中Session可能会引起并发问题
- php session的锁和并发
- Oracle 数据库针对表主键列并发导致行级锁简单演示
- MySQL中SELECT+UPDATE处理并发更新问题解决方案分享
- Android中实现Runnable接口简单例子
- Android线程管理之ActivityThread
- tomcat配置调优记录
- linux网络编程----->高并发--->多进程并发服务器