对于Java多线程的理解,我以前仅仅局限于实现Runnable接口或者继承Thread类,然后重写run()方法,最后start()调用就算完事,但是一旦涉及死锁以及对共享资源的访问和随时监控线程的状态和执行顺序等等就不行了,所以现在开始看Thinking in java的并发这一节,从头学多线程,
下面发一个关于线程中的任务返回,和创建线程池的代码
package com.bird.thinking;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* @use 使用Executor显示的创建Thread对象
* @author Bird
*
*/
class LiftOff implements Runnable{//创建一个类实现Runable接口
protected int countDown = 10;
private static int taskCount = 0;
private final int id = taskCount++;
public LiftOff(){}
public LiftOff(int countDown){
this.countDown = countDown;
}
public String status(){
return "#"+id+"("+(countDown > 0 ? countDown : "Liftoff !" + ")");
}
public void run(){
while(countDown-- > 0){
System.out.println(status());
Thread.yield();
}
}
}
public class CachedThreadPool {
public static void main(String[] args){
ExecutorService exec = Executors.newCachedThreadPool();//创建线程池
for(int i = 0; i < 5; i++){
exec.execute(new LiftOff());//进行工作
}
exec.shutdown();
}
}
Executor为执行器,将为你管理Thread对象,从而简化了并发编
程。Executor在客户端和任务执行之间提供了一个间接层,与客户
端直接执行任务不同,这个中介对象将执行任务。Executor允许你
管理异步任务的执行,而无需显示的管理线程的生命周期。
Executor是Java SE6/7中启动任务的优选方法。
下面的代码就能够随时监控各个线程的状态了
ackage com.bird.thinking;
import java.util.ArrayList;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
/**
* @use 创建从任务中返回值的多线程,可以判断他的状态
* @author Bird
*
*/
class TaskWithResult implements Callable<String>{//实现这个接口,调用的是call()方法
private int id;
public TaskWithResult(int id){
this.id = id;
}
public String call(){
return "result of TaskWithResult" + id;
}
}
public class CallableDemo {
public static void main(String[] args){
ExecutorService exec = Executors.newCachedThreadPool();
ArrayList<Future<String>> results = new ArrayList<Future<String>>();
for(int i = 0; i < 10; i++){
results.add(exec.submit(new TaskWithResult(i)));
}
for(Future<String> fs : results){
try{
System.out.println(fs.get());//可以调用很多方法,包括是否工作等等
}catch(Exception e){
e.printStackTrace();
}finally{
exec.shutdown();
}
}
}
}
[size=xx-small]Submit方法会产生Future对象,他用Callable返回结果的特定类型
进行了参数化。你可以用isDemo()方法来查询Future()是够已经完
成。当任务完成的时候,他具有一个结果,你可以调用get()方法
获得这个结果。
Java 6/7最佳的休眠方法为TimeUnit.MILLISECONDS.sleep(100);[/size]
最好不要用 Thread.sleep(100);
分享到:
相关推荐
在Java编程中,多线程处理是提升程序性能和效率的重要手段,特别是在处理大量数据库数据时。本主题将深入探讨如何使用Java的并发包(java.util.concurrent)来实现多线程对数据库数据的批量处理,包括增、删、改等...
Java的多线程是其编程语言中的一个重要特性,允许在单个程序中同时执行多个任务,从而提高程序的效率和响应性。理解多线程对于Java开发者至关重要,尤其对初学者来说,是掌握高级编程技巧的基础。 首先,我们需要...
### Java多线程编程经验 #### 一、Java线程:概念与原理 现代操作系统都是多任务操作系统,其中多线程是一种重要的实现多任务的方式。线程是进程内的一个执行单位,一个进程可以包含多个线程。例如,在Java应用...
Java多线程是Java编程中的核心概念,它允许程序同时执行多个任务,极大地提升了软件的效率和并发性。这份“Java多线程的经典资料.rar”压缩包包含了一份名为“Java线程.pdf”的文档,很可能是关于Java多线程的详细...
Java多线程是Java编程中的一个核心概念,它允许程序同时执行多个独立的任务,从而提高应用程序的效率和响应性。在Java中,多线程主要通过两种方式实现:继承Thread类和实现Runnable接口。这份"JAVA多线程的PPT和示例...
Java多线程结构是Java编程中的重要组成部分,它允许程序同时执行多个任务,提升系统效率。在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: 当自定义类继承Thread类时,...
"Java 多线程面试题及答案" 本文总结了 39 个 Java 多线程的问题,并对每个问题进行了详细的解释和分析。以下是从该文件中生成的相关知识点: 1. 多线程的用途 多线程可以发挥多核 CPU 的优势,防止阻塞,和便于...
Java多线程是Java编程中不可或缺的一部分,它允许并发执行多个任务,从而提高应用程序的效率和响应速度。本文将深入探讨Java多线程的相关知识点,包括它的用途、创建线程的方式、start()与run()的区别、Runnable和...
Java多线程是Java编程中的核心概念,尤其在开发高并发、高性能的应用程序时不可或缺。本书籍《JAVA多线程教材》显然会深入探讨这一主题,帮助开发者掌握如何有效地利用多核处理器,提高程序的执行效率。PDF格式的...
### Java多线程编程总结 #### 一、Java线程:概念与原理 1. **操作系统中线程和进程的概念** - 当前的操作系统通常为多任务操作系统,多线程是实现多任务的一种手段。 - **进程**:指内存中运行的应用程序,每个...
### Java多线程知识点详解 #### 一、Java Thread 概念 在Java中,**线程**是一种轻量级的进程,它是程序执行流的最小单元。一个标准的Java应用通常至少包含一个线程,即主(Main)线程。Java支持多线程编程,这...
Java多线程是Java编程中不可或缺的部分,它允许程序同时执行多个任务,提高了程序的并发性和效率。在Java中,实现多线程主要有两种方式:继承Thread类和实现Runnable接口。 1. 继承Thread类: - 当你定义一个类...
总之,“多线程发邮件”利用了Java的多线程和并发特性,通过ExecutorService和Callable接口实现了邮件发送的并行化,提高了效率。同时,使用线程池可以更好地管理资源,避免频繁的线程创建和销毁,从而优化系统性能...
总结来说,实现"java多线程实现乒乓球双打"需要对Java的线程API有深入的理解,包括线程的创建与启动、同步与通信机制、并发控制工具的使用以及设计模式的应用。通过这种方式,我们可以构建出一个生动有趣的模拟游戏...
Java多线程教程资料(强烈推荐) 本文档提供了 Java 多线程编程的详细教程,涵盖了多线程的概念、原理、创建、启动、同步、锁、线程池、线程状态转换、线程交互、线程调度、volatile 关键字、信号量、阻塞队列、...
### Java多线程编程总结 #### 一、Java线程:概念与原理 - **操作系统中线程和进程的概念** 当前的操作系统通常都是多任务操作系统,多线程是一种实现多任务的方式之一。在操作系统层面,进程指的是内存中运行的...
Java多线程面试问题和答案总结 Java多线程是一种高级的编程技术,能够充分发挥多核CPU的优势,防止阻塞,简化模型建立,提高程序的效率和可维护性。下面是40个Java多线程面试问题和答案的总结,涵盖了多线程的基本...
Java多线程编程是Java语言中的一个重要组成部分,它允许程序在单个进程内同时执行多个线程,从而实现多任务处理。在Java 5版本之前,Java对多线程的支持相对有限,编写复杂的多线程程序具有一定的挑战性。然而,从...