java多线程编程基础

thread和runnable已经out了。取而代之的是callable<V>,它的结果存在future<V>中。后者有get对象可以阻塞并最终获得异步结果。FutureTask既是callable又是future。可以作为一个执行单元。

直接启动一个thread执行callable是不明智的,因为太多的短命的线程会影响jvm的性能。较好的办法是Executors的线程池。它有不同的方法创建不同的线程池:
newCachedThreadPool:New threads are created as needed; idle threads are kept
for 60 seconds.
newFixedThreadPool:The pool contains a fixed set of threads; idle threads are
kept indefinitely.
newSingleThreadExecutor:A “pool” with a single thread that executes the submitted
tasks sequentially (similar to the Swing event dispatch
thread).
newScheduledThreadPool:A fixed-thread pool for scheduled execution; a replacement
for java.util.Timer.
newSingleThreadScheduledExecutor:A single-thread “pool” for scheduled execution

当你有了一个callable,你可以交给ExecutorService去执行,通过submit。当然runnable和thread也可以,不过他们没有返回值。

 

如果你有一组task需要执行,你不必一个一个的去启动。ExecutorService的invokeAny和invokeAll可以帮你解决问题。你只需要处理返回的list<future>就可以了。ExecutorCompletionService是对ExecutorService的又一层封装,可以帮助你依次获得结果。

 

如果你的目的不只是利用多线程执行一组任务,而是需要多个线程互相协作,比如生产者-消费者这样的问题。那么需要进行线程间的通讯。传统的wait和notify已经out了,await和signal用起来也比较麻烦。如果你的需求满足一定的模式,那么java自带哪些同步设施,比如CyclicBarrier,CountDownLatch,Exchanger,Semaphore,SychronousQueue可以满足要求。具体的适用可以参见文档。

 

如果线程需要访问共享变量,那么java的同步集合是需要考虑得,其他的threadlocal也有应用场景。

转载于:https://www.cnblogs.com/alphablox/archive/2013/02/17/2914373.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux网络管理实 验 指 导

Linux网络管理 实 验 指 导 实验一 TCP/IP网络接口配置 一、实验目的 ● 掌握Linux下TCP/IP网络的设置方法。 ● 学会使用命令检测网络配置。 ● 学会启用和禁用系统服务。 二、项目背景 某企业新增了Linux服务器&#xff0c;在但还没有配置TCP/IP网络参数&#xff0…

开发iOS即时通讯工具参考的一些开源、框架和教程

转&#xff1a;http://www.ctolive.com/space.php?uid927&doblog&id2277 下面收集了开发即时通讯工具&#xff0c;如AIM、ICQ(Oscar 协议)以及Jabber(XMPP协议)的iOS客户端程序的一些开源&#xff0c;可以直接使用或者参考&#xff1a;Oscar协议开发库LibOrange&#…

HA双机热备配置

HA&#xff08;高可用性集群&#xff09;当主机处于工作状态时&#xff0c;从机处于休眠状态&#xff0c;当主机宕机时&#xff0c;从机便会开始工作&#xff0c;让用户几乎感觉不到服务的中断&#xff0c;类似于网络路由配置中的备份。当主机存活时&#xff0c;所有的资源全在…

我的服装DRP之开发感悟

先向各位拜个晚年。 今年过年期间都在想DRP的事&#xff0c;很多朋友也联系我&#xff0c;讨论技术问题的、谋求合作的、分析行业前景的、让我提供源码和数据库的都有。再次谢谢朋友们的关心。目前来说&#xff0c;在修改系统bug的同时&#xff0c;我打算重新找一份工作&#x…

Linux配置

第3章 对Linux系统管理员的建议... 1 第4章 安装Linux操作系统... 2 第5章 初步认识Linux. 5 第6章 Linux系统的远程登陆... 13 第7章 Linux文件与目录管理... 19 第8章 Linux系统用户及用户组管理... 37 第9章 Linux磁盘管理... 45 第10章 文本编辑工具vim.. 70 第11章…

iOS开发那些事-iOS常用设计模式–委托模式案例实现

书接上回&#xff0c;应用案例 我们以UITextFieldDelegate为例来说明一下委托的使用。 UITextFieldDelegate是控件UITextField的 委托&#xff0c;控件的委托主要负责响应控件事件或控制其他对象。除了UITextField&#xff0c;WebView、UITableView等控件也有相应的委托对象。 …

python网络编程-一些常用有用的函数

socket.getservbyname(servicename[, protocolname]) –> integer 查询某个协议对应的端口号&#xff0c;需要使用两个参数&#xff0c;servicename对应端口名称&#xff0c;如 http&#xff0c; smtp&#xff0c;等。protocolname对应tcp&#xff0c;udp。 s.getsockname()…

LAMP环境的搭建

一、mysql的安装1、tar -zxvf mysql.gz2、mv mysql-5.1.49-linux-i686-glibc23/ /usr/local/mysql3、cd /usr/local/mysql4、useradd -s /sbin/nologin -M mysql5、mkdir -p /data/mysql6、chown -R mysql:mysql /data/mysql/7、./scripts/mysql_install_db --usermysql --data…

Windows API 逐个逐个学MessageBox(5) 遍历驱动器并获取驱动器属性 GetLogicalDriveStrings、GetDriveTypeA...

首先还是贴代码 VC Code: /* *************************************《精通Windows API》 * 示例代码* GetVolumeInfo.c* 4.2.1 遍历驱动器并获取驱动器属性**************************************//* 头文件 */ #include <windows.h> #include <stdlib.h> #i…

apache如何在虚拟主机中实现用户验证

虚拟主机配置文件中&#xff0c;需要加入<Directory /data/web/test>AllowOverride AuthConfig</Directory>然后在虚拟主机的主目录&#xff0c;即DocumentRoot 目录下vi /data/web/test/.htaccess加入AuthName "frank share web" AuthType Basic Aut…

linux 内核编译安装及卸载

编译安装&#xff1a; 下载需要的包 apt-get install kernel-package libncurses5-dev fakeroot wget bzip2 cp linux-3.x.x /usr/src cd /usr/src/linux-3.x.x make menuconfig make modules make modules_install make make install sudo mkinitramfs -o /boot/initrd.img-3.…

Linux服务器安全之用户密钥认证登录(基于CentOS 7.0系统)

一、 密钥简介在Linux下&#xff0c;远程登录系统有两种认证方式&#xff1a;密码认证和密钥认证。密码认证方式是一种传统的安全策略。设置一个相对复杂的密码&#xff0c;对系统安全能起到一定的防护作用&#xff0c;但是也面临一些其他问题&#xff0c;例如密码暴力破解、密…

Servlet 3.0 新特性详解

简介 Servlet 是 Java EE 规范体系的重要组成部分&#xff0c;也是 Java 开发人员必须具备的基础技能&#xff0c;Servlet 3.0 是 Servlet 规范的最新版本。本文主要介绍了 Servlet 3.0 引入的若干重要新特性&#xff0c;包括异步处理、新增的注解支持、可插性支持等等&#xf…

LAMP环境下配置虚拟主机和域名的跳转

一、配置虚拟主机 vim /usr/local/apache2/conf/extra/httpd-vhost.conf <VirtualHost *:80> ServerAdmin webmasterdummy-host.example.com root邮箱 DocumentRoot "/data/123"虚拟主机存在的目录 ServerName 123.com 配置的虚拟主机域名 …

linux下搭建nagios监控

一、什么是nagios 1.nagios 简介 Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务&#xff0c;同时提供异常通知功能等。Nagios可运行在Linux/Unix平台之上&#xff0c;同时提供一个可选的基于浏览器的WEB界面以方便系统管理人…

Coursera NLP 笔记02

找到一个很好的英语笔记&#xff0c;等有空了再整理第二章http://files.asimihsan.com/courses/nlp-coursera-2013/notes/nlp.html#the-trigram-estimation-problem转载于:https://www.cnblogs.com/bertrandwdx/archive/2013/03/04/2943437.html

zabbix yum安装

zabbix的单个Server节点可以支持上万台设备&#xff0c;每秒可以处理1.5万次请求&#xff0c;理论上可以支持5万台设备.zabbix 的使用可以分为三类用户&#xff1a;入门用户&#xff08;熟悉Zabbix的安装跟配置&#xff09;&#xff0c;中级用户&#xff08;熟悉LAMP和LNMP环境…

Oracle 索引概述

Oracle 提供了多种不同类型的索引以供使用。简单地说&#xff0c;Oracle 中包括如下索引&#xff1a;B*树索引&#xff1a;这些是我所说的“传统“索引。到目前为止&#xff0c;这是 Oracle 和大多数其他数据库中最常用的索引。B*树的构造类似于二叉树&#xff0c;能根据键提供…

zabbix的安装

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix由2部分构成&#xff0c;zabbixserver与可选组件zabbix agent。 一、Zabbix简介 1.1Zabbix简介   Zabbix是一个企业级的开源分布式监控解决方案&…

LinuxMySQL主从配置

mysql 主从配置-2主从 mysql 启动以后&#xff0c;我们来做一些配置。假设 3306 为主&#xff0c;3307 为从登陆 mysql 命令和参数/usr/local/mysql/bin/mysql登陆不同的 mysql 参数&#xff0c;可以 IP 也可以是 sockmysql -S /tmp/mysql.sock sock 登陆主mysql -h127.0.0.1 -…