`

52、java.util.concurrent 练习

 
阅读更多
import java.util.concurrent.*;
public class ExecutorsTest 
{
	public static void main(String[] args) 
	{
		//ExecutorService threadPool = Executors.newFixedThreadPool(3);//固定大小线程池
		//ExecutorService threadPool = Executors.newCachedThreadPool();//根据需要创建线程
		ExecutorService threadPool = Executors.newSingleThreadExecutor();//创建单个线程,可以解决:线程死掉后可以重新启动线程的问题。实际上是新建一个线程,跟重新启动线程效果一样
		for(int i=0;i<10;i++)
		{
			final int task = i+1;
			threadPool.execute(new Runnable(){
				public void run()
				{
					for(int j=0;j<10;j++)
						System.out.println(Thread.currentThread().getName()+" loop of "+(j+1)+" task of "+task);
				}
			});
		}
		threadPool.shutdown();//关闭线程池
		System.out.println("all of 10 tasks have committed");
	}
}

 

import java.util.concurrent.*;
public class ExecutorsTest 
{
	public static void main(String[] args) 
	{
		ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(3);
		/*threadPool.schedule(new Runnable(){
			public void run()
			{
				System.out.println(Thread.currentThread().getName()+" bombing");
			}
		},
			2,
			TimeUnit.SECONDS);
		thradPool.shutdown();
		*/
		threadPool.scheduleAtFixedRate(new Runnable(){
			public void run()
			{
				System.out.println("bombing");
			}
		},
			2,
			1,
			TimeUnit.SECONDS);
	}
}

 

import java.util.concurrent.*;
public class ExecutorsTest 
{
	public static void main(String[] args) 
	{
		ExecutorService threadPool = Executors.newFixedThreadPool(3);
		Future<Integer> future = threadPool.submit(new Callable<Integer>(){
			public Integer call()throws Exception
			{
				System.out.println(Thread.currentThread().getName());
				Thread.sleep(2000);
				return 3;
			}
		});
		try{
			System.out.println("main thread is coming");
			Integer res = future.get();//get()方法会造成线程阻塞
			System.out.println(res);
		}catch(Exception e){}

		threadPool.shutdown();
	}
}

 

import java.util.concurrent.*;
import java.util.*;
public class ExecutorsTest 
{
	public static void main(String[] args) 
	{
		ExecutorService threadPool = Executors.newFixedThreadPool(3);
		Collection<Callable<Integer>> tasks = new ArrayList<Callable<Integer>>();
		Callable<Integer> task1 = new Callable<Integer>(){
			public Integer call()throws Exception
			{
				System.out.println(Thread.currentThread().getName()+" task 1");
				Thread.sleep(2000);
				return 111111;
			}
		};
		Callable<Integer> task2 = new Callable<Integer>(){
			public Integer call()throws Exception
			{
				System.out.println(Thread.currentThread().getName()+" task 2");
				Thread.sleep(2000);
				return 222222;
			}
		};
		Callable<Integer> task3 = new Callable<Integer>(){
			public Integer call()throws Exception
			{
				System.out.println(Thread.currentThread().getName()+" task 3");
				Thread.sleep(2000);
				return 333333;
			}
		};
		tasks.add(task1);
		tasks.add(task2);
		tasks.add(task3);
		System.out.println(tasks);
		try{
			List<Future<Integer>> retval = threadPool.invokeAll(tasks);//同时执行多个任务
			for(int i=0;i<retval.size();i++)
			{
				Integer res = retval.get(i).get();//get()方法会造成线程阻塞
				System.out.println(res);
			}
		}catch(Exception e){}
		threadPool.shutdown();
	}
}

 

分享到:
评论

相关推荐

    Prentice.Hall.Core.Java.Volume.2.Advanced.Features.8th.Edition.

    1. **多线程**:讲解了Java中的并发编程,包括线程的创建、同步机制(如synchronized关键字和java.util.concurrent包)、死锁与活锁的概念,以及如何处理线程安全问题。 2. **网络编程**:介绍了Java的网络API,...

    Functional Interfaces in Java.pdf

    另外,作者还深入讨论了如何在多线程环境中使用函数式接口,例如在`java.util.concurrent`包中,`Callable`接口和`Future`接口可以与函数式接口结合起来使用,以支持异步处理和结果获取。 为了更好地理解函数式接口...

    Java线程(Java.Thread)(中英版)

    这些书籍可能会详细解析`synchronized`关键字、`wait()`, `notify()`和`notifyAll()`方法,以及如何使用`java.util.concurrent`包中的工具类,如`ExecutorService`, `Semaphore`, `CyclicBarrier`等来管理和控制线程...

    JAVA常用类库课件

    5. **多线程**:Java的并发编程是通过`java.lang.Thread`和`java.util.concurrent`包实现的。`ExecutorService`、`Future`、`Callable`等接口和类简化了多线程的管理和任务执行。 6. **网络编程**:`java.net`包...

    JavaAPI部分练习代码全注释

    8. **多线程**:除了`Thread`类,`java.util.concurrent`包提供了高级的并发工具,如`ExecutorService`、`Future`、`Semaphore`等,便于管理和控制并发任务。 9. **日期时间API**:Java 8引入了新的日期时间API (`...

    JAVA定时关机程序源代码

    在编程领域,尤其是在Java开发中,创建一个定时关机程序是一项常见的练习,它能帮助我们理解如何使用系统调用和时间管理。这个"JAVA定时关机程序源代码"是一个很好的学习资源,特别是对于初学者来说,它能深入理解...

    java类库

    5. **多线程**:在`java.lang.Thread`和`java.util.concurrent`包中,Java提供了对多线程的支持。`Thread`类代表程序中的执行线程,而`ExecutorService`和`Future`接口则提供了线程池和异步任务的管理。 6. **网络...

    java 张孝祥高级

    在Java中,`java.util.concurrent.ThreadPoolExecutor`类提供了自定义线程池的能力,允许我们设置核心线程数、最大线程数、线程空闲时间、任务队列等参数,以适应不同的并发需求。 Executor服务是Java 5引入的一个...

    ssd8 ex1EchoServer.java EchoClient.java ThreadEchoServer.java

    这可能使用了`java.lang.Thread`类或者`java.util.concurrent.ExecutorService`来管理和调度处理客户端请求的线程。 `Readme.txt`文件通常包含关于项目、如何运行程序、注意事项或解释的说明。在这个上下文中,它...

    Java数据结构和算法

    Java中的队列实现有java.util.Queue接口和java.util.concurrent.PriorityQueue类。 5. 树:树是一种非线性数据结构,包含根节点、子节点和父节点的概念。二叉树是最常见的树,包括二叉查找树(Binary Search Tree)...

    java编程实现时钟

    这可以通过使用`synchronized`关键字、`java.util.concurrent`包中的工具或者`SwingUtilities.invokeLater()`来实现。 6. **设计模式**:在构建这样的应用程序时,可能会用到观察者模式(Observer Pattern),使...

    Java Thread Programming

    Java提供了`java.util.concurrent`包中的`BlockingQueue`接口及其实现,如`ArrayBlockingQueue`、`LinkedBlockingQueue`和`PriorityBlockingQueue`,它们是线程安全的数据结构,常用于生产者消费者模式。 死锁、...

    java练习题

    ### Java练习题知识点详解 #### 1. 冒泡排序法 **知识点**: 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到...

    万年历java代码.rar

    `java.lang.Thread`或`java.util.concurrent`包的工具可以帮助实现并发。 8. **测试与调试**:确保程序正确运行的关键步骤是进行单元测试和集成测试。`JUnit`库提供了方便的测试框架,可以帮助开发者编写测试用例,...

    Java并发编程进阶练习代码

    Java 5引入了`java.util.concurrent`包,其中`BlockingQueue`接口和其实现如`ArrayBlockingQueue`、`LinkedBlockingQueue`等提供了更高级的线程间通信方式,它们可以用于生产者-消费者模式或者工作窃取模式。...

    java核心api下载

    8. **多线程**:`java.lang.Thread`和`java.util.concurrent`包提供了多线程编程的支持,包括线程的创建、同步和协作。 9. **反射**:`java.lang.reflect`包允许程序在运行时检查类、接口、字段和方法的信息,实现...

    use Java, learn about Data Structures of Java.zip

    Java中的java.util.Stack类提供了对栈操作的基本支持。 4. **队列(Queue)**:队列是一种先进先出(FIFO)的数据结构,通常用于任务调度和消息传递。Java提供了多种队列实现,如LinkedList实现的Queue接口,以及...

    jdk6-api-zh_CN(java API 中文文档)

    5. **多线程**:`java.lang.Thread`和`java.util.concurrent`包提供了多线程编程的工具,如`Runnable`、`ExecutorService`、`Semaphore`等。 6. **异常处理**:`java.lang.Throwable`和其子类如`Exception`、`Error...

    Java高级特性 - 多线程练习题.zip

    为了解决这个问题,Java提供了多种线程同步机制,包括`synchronized`关键字、`volatile`关键字、`java.util.concurrent`包中的工具类等。例如,`synchronized`可以保证同一时间只有一个线程访问特定代码块,防止竞态...

    java万年历

    5. **线程处理**:为了实时更新时间,可能使用了Java的多线程技术,如`Thread`类或`java.util.concurrent`包中的工具,以确保时间的动态刷新不会阻塞用户界面。 6. **文档处理**:提供的`.docx`文件可能是项目的...

Global site tag (gtag.js) - Google Analytics