| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx

Java Concurrent处理并发需求

4
Java IDE C/C++ 18213 次浏览
java5开始,增加了concurrent api,用于并发处理。比如起多个线程并发从网络上下载图片,然后在本地显示。
这里写个简单的代码,来说明如何使用concurrent api提供的线程连接池。
运行结果类似这样:
start do 1 task …      
>>main thread end.      
start do 2 task …      
start do 1 finished.      
start do 3 task …      
start do 2 finished.      
start do 3 finished.
这里的task1到task3,都做的同样的事情,让它所属的线程休眠2000ms:
private static void doSomething(int id) {      
    System.out.println("start do " + id + " task …");      
    try {      
        Thread.sleep(1000 * 2);      
    } catch (InterruptedException e) {      
        e.printStackTrace();      
    }      
    System.out.println("start do " + id + " finished.");      
}

如果没有java自带的这个api,需要自己或者使用不标准的第三方线程池api。用concurrent api写起来很简洁:
public static void main(String[] args) {      
    ExecutorService executorService = Executors.newFixedThreadPool(2);
    executorService.submit(new Runnable() {      
        @Override      
        public void run() {      
            doSomething(1);      
        }      
    });
    executorService.submit(new Runnable() {      
        @Override      
        public void run() {      
            doSomething(2);      
        }      
    });
    executorService.submit(new Runnable() {      
        @Override      
        public void run() {      
            doSomething(3);      
        }      
    });
    executorService.shutdown();      
    System.out.println(">>main thread end.");
}
首先,创建了一个线程池,里面有2个线程:
ExecutorService executorService = Executors.newFixedThreadPool(2);
然后,通过submit()方法,提交一个Runnable的实例,这个实例将交由线程池中空闲的线程执行。
在main线程中直接运行了:
executorService.shutdown();
不必担心,线程池不会直接关闭的,只有当它执行完所有提交的任务后才会关闭。如果不写这行,在本例中,应用将不会停止,因为虽然main线程(就是运行main方法的线程,也叫主线程)退出了,但是线程池中依然有线程运行,因此应用(进程)不会退出。
完整代码:
package com.easymorse.concurrent;

import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Demo {

        /**
         * @param args
         */
        public static void main(String[] args) {
                ExecutorService executorService = Executors.newFixedThreadPool(2);

                executorService.submit(new Runnable() {
                        @Override
                        public void run() {
                                doSomething(1);
                        }
                });

                executorService.submit(new Runnable() {
                        @Override
                        public void run() {
                                doSomething(2);
                        }
                });

                executorService.submit(new Runnable() {
                        @Override
                        public void run() {
                                doSomething(3);
                        }
                });

                executorService.shutdown();
                System.out.println(">>main thread end.");

        }

        private static void doSomething(int id) {
                System.out.println("start do " + id + " task ...");
                try {
                        Thread.sleep(1000 * 2);
                } catch (InterruptedException e) {
                        e.printStackTrace();
                }
                System.out.println("start do " + id + " finished.");
        }

}

7个答案

0

Nothing compares to Weber using Genesis sort of grills. That is certainly the type gas grills which have been that will always make sure that they deliver a high performance part of down interval clavon condo price

0

Pretty good post. I just stumbled upon your blog and wanted to say that I have really enjoyed reading your blog posts. Any way I'll be subscribing to your feed and I hope you post again soon. Big thanks for the useful info. Break into pharmaceutical sales

0

A lot of people having an incorrect image about the cash advance loans or sometimes refer it as bad credit payday loans. 먹튀검증사이트

0
可以用! 谢谢
0
嘿嘿 不错 学习起来 嘿嘿
0
帮公司长期招聘以下职位,有意者可将简历Email至:lcassie@163.com.
公司福利好,年底有奖金,有五险一金以外的商业保险,外加子女险,加班可调休,有良好的培训及提升的机会!

JAVA工程师
要求:    
1.一年以上JAVA开发经验,熟悉软件开发流程;
2.精通JAVA语言,精通Struts、Hibernate、和Hibernate3.0开发;
3.熟练掌握SQL语法,精通Oracle等主流数据库相关技术及工具;
4.熟悉WebLogic/Tomcat等主流J2EE应用服务器,熟悉linux等服务器的配置
5.具备一定的系统设计能力需求分析能力,能完成相关技术文档编写;
6.具备较好的沟通协调能力、工作认真,能承受一定工作压力,有较强团队意识。

高级JAVA工程师
要求    
1.计算机或相关专业本科学历,重点大学本科以上学历优先,2年以上工作经验,1年以上J2EE应用开发经验;
2.至少参加过一个以上的大型软件项目的设计和开发;
3.深刻理解计算机原理,擅长进行模块设计、接口设计、代码开发;
4.精通面向对象设计方法和设计模式,逻辑能力佳,熟悉Rational Rose、UML设计工具;
5.理解J2EE系统架构,具有大型基于J2EE体系结构的设计和开发经验;
6.精通jQuery/spring/iBATIS应用框架;
7.熟悉eclipse开发工具及插件配置;
8.熟练掌握Oracle/mysql主流数据库应用,有一定的数据库设计经验;
9.熟悉WEB SERVICE开发;
10.熟悉tomcat、weblogic软件。


Java普通开发工程师
要求    
1.2年以上JAVA开发经验;
2.熟悉EXTJS、spring MVC、iBatis开发技术;
3.熟练使用spring+structs+hibernate等框架开发;
4.熟练tomcat服务器配置和使用.

Java高级开发工程师
要求    
1.有丰富的JAVA开发经验;
2.能独立完成复杂逻辑关系数据库的设计与开发;
3.熟悉EXTJS、spring MVC、iBatis开发技术;
4.熟练使用spring+structs+hibernate等框架开发;
5.熟练tomcat服务器配置和使用.

java架构师
要求    
1.至少有1-2个大型系统架构设计经验,有异构系统集成经验尤佳;
2.精通JAVA编程,熟悉J2EE、SCA等技术规范;
3.精通Struts、Spings、Hibernate、ExtJS等;
4.抽象思维能力强,能熟练使用Rational Rose/PowerDesigner进行系统分析、设计;
5.表达能力强,能完整、准确阐述架构设计方案,并指导软件工程师开展工作;
6.熟悉WebLogic、WebSphere、JBoss/Tomcat等中间件;
7.熟悉Oracle、MSSQL、DB2等数据库。

Net Programmers .Net程序员
要求    
1.精通.NET编程技术,熟悉html、javascript,对JS技术有一定的研究;
2.大于1年以上.NET网站项目开发经验,有成功的开发案例;
3.精通sql server,及其性能优化,能独立设计高负荷的数据结构;
4.具备系统分析和设计能力,以及规范化、标准化的代码编写习惯;
5.有大型系统开发及设计经验、对SEO有一定的了解的优先考虑

C++软件工程师
要求    
1.熟悉C/C++;
2.对WIN32 API及界面开发有比较深的认识和应用经验;
3.熟悉TCP/IP socket通信;
4.对常用Windows控件的基本消息要有了解。

高级C/C++工程师
要求    
1.计算机或相关专业本科及其以上学历,三年以上C/C++/VC++/Linux C开发经验;
2.两年以上Socket编程,对Internet通讯有较深入的了解,熟悉IOCP和多线程处理;
3.熟悉P2P原理,熟悉KAD协议原理;
4.熟悉网络视频传输协议、视频文件格式,有从事过流媒体相关项目经验优先;
5.有良好的设计思路和编程习惯,熟悉软件开发流程,能够根据产品需求完成技术概要设计和详细设计;
6.独立开发和自我约束能力强、善于和他人沟通、工作认真负责、能够承受工作压力、具有团队合作精神;
7.英语良好,能流畅阅读计算机英语专业文献;

质量工程师
要求
1.计算机或通信相关专业毕业,本科以上学历,对软件过程规范、软件质量有较深理解;
2.有较强的识别问题能力;
3.具有创新思维,思维敏捷,热爱流程创新工作;
4.具备较强的沟通、组织协调能力,工作积极主动,有较强的学习能力。
0
写得不错,Java并发处理需要注意很多问题