博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA Executor实现并发线程
阅读量:2447 次
发布时间:2019-05-10

本文共 2515 字,大约阅读时间需要 8 分钟。

   通过Executor来管理线程,包括了启动线程和关闭线程等。通过java.util.concurrent.ExecutorService

对象来启动线程并执行任务,因为java.util.concurrent.ExecutorService的execute方法参数类型是Runnable类的实例。比采用Threadstart()来启动线程会比较好。

  1.Executor简单的实现线程:

   

//线程数	 ExecutorService threadPool=Executors.newFixedThreadPool(3);	   	   for (int i = 0; i < 20; i++) {		   Runnable runnable=new Runnable() {				@Override				public void run() 				{										 System.out.println("启动线程=="+Thread.currentThread().getName());				}		   };		   //放进任务	         threadPool.execute(runnable);	        	 	   }	// 关闭启动线程	  threadPool.shutdown();

说明:
    1).通过java.util.concurrent.Executors实现线
程管理工具,有3种类型 

        ExecutorService executorService = Executors.newCachedThreadPool();

        ExecutorService executorService = Executors.newFixedThreadPool(threadPoolNum);

        ExecutorService executorService = Executors.newSingleThreadExecutor();

   2).java.util.concurrent.ExecutorService的execute把任务添加到线程池里执行。

     3).java.util.concurrent.ExecutorService shutdown();关闭已经启动的线程。

 2.我们要让线程执行针对的业务,好比如有好几个通道,一个线程对应一个通道,来发送相应的信息。

   先把线程和通道对应起来,放在容器里,代码实现:

threadPool=Executors.newFixedThreadPool(threadPoolNum, new ThreadFactory(){			@Override			public Thread newThread(Runnable r) 			{				Thread thread=new Thread(r);				Channel channel = connectManage.createChannel();//新建一个通道				if(channel!=null)					channelManager.put(thread, channel);//一个线程对应一个通道				return thread;			}					});
    执行线程并发送消息到相应的通道里。代码实现如下:

Runnable runnable=new Runnable() {			@Override			public void run() 			{				Thread thread=Thread.currentThread();//获取当前线程				Channel channel=channelManager.get(thread);//取出线程对应的通道				try {					channel.basicPublish(msg.getExchange(),msg.getRouteKey(),MessageProperties.  PERSISTENT_TEXT_PLAIN,msg.getSerialBytes());//发送消息				} catch (IOException e) {					e.printStackTrace();				}			}		};				threadPool.execute(runnable);//添加任务

   3.我们可以获取线程执行有结果是TRUE还是FALSE。具体实现:

     

public class Task implements CompilationTask{	/**	 * 设置处理器(用于注释处理)	 */	@Override	public void setProcessors(Iterable
processors) { // } /** * 设置格式化诊断和其他本地化数据时要应用的语言环境 */ @Override public void setLocale(Locale locale) { } /** * 执行此编译任务。编译只能被执行一次 */ @Override public Boolean call() { System.out.println(Thread.currentThread().getName()); return true; }
Future
future=threadPool.submit(new Task()); System.out.println(future.get()); // 关闭启动线程 threadPool.shutdown();
说明:

   java.util.concurrent.ExecutorService的submit,参数类型是Runnable类型,实现具体的任务,然后这个任务执行是否成功,我们可以通过返回值进行判断,方便我们管理。

总结:

     JAVA  Executor实现并发线程,比采用Threadstart()来启动线程会比较好。

  

  

转载地址:http://cpmqb.baihongyu.com/

你可能感兴趣的文章
siri捷径调用谷歌翻译_告诉它使用Google助理,以减少Siri的麻烦
查看>>
outlook转发邮件步骤_Microsoft Outlook中的快速步骤指南
查看>>
macos 托盘文件预览_如何在Ubuntu的文件管理器中快速预览文件(如macOS中的“ Quick Look”)...
查看>>
macos 快速启动启动台_无法获取macOS通知? 这是解决方法(无需重新启动)
查看>>
为什么您可能不应该将您的企业网站运出家门
查看>>
如何在Android上使用Amazon Underground免费获取大量应用内购买
查看>>
如何使用HDHomeRun在计算机,游戏机和其他设备上观看直播电视
查看>>
如何在没有智能手机的情况下使用Google Authenticator和其他两因素身份验证应用程序...
查看>>
如何显示密件抄送人员地址_什么是密件抄送,以及为什么不使用它会成为一个可怕的人...
查看>>
询问HTG:增强Wi-Fi连接性,校准显示器并执行基于计算机的恶作剧
查看>>
将code添加到上下文菜单_通过将选项卡添加到资源管理器,创建上下文菜单项等来轻松调整Windows 7和Vista...
查看>>
询问HTG:选择要备份的文件,将扫描仪用作复印机,并将iPad配置为第二台显示器...
查看>>
es dsl 提取不重复值_询问操作方法:诊断DSL挂断,从PowerPoint中提取媒体,将IE限制为单个网页...
查看>>
在Boxee中使用Pandora
查看>>
linux创建交换分区设置_如何在Linux上创建交换文件
查看>>
vim 关闭查找_如何打开或关闭查找我的iPad
查看>>
linux rev命令_如何在Linux上使用rev命令
查看>>
slack财报_如何将自己的表情符号添加到Slack
查看>>
juicer hic使用_使用Sound Juicer在Linux中翻录音频CD
查看>>
如何在Microsoft表单中添加分支
查看>>