- 浏览: 1256761 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (499)
- java (101)
- linux (82)
- mysql (30)
- javascript (45)
- Oracle (12)
- ext (14)
- 虚拟机 (1)
- 搜索引擎 (2)
- struts2 (11)
- 设计模式 (9)
- nginx (17)
- tomcat (12)
- 随想 (10)
- spring (18)
- svn (1)
- flash (3)
- UML (1)
- 数据结构 (7)
- 算法 (2)
- 网摘 (9)
- 数据库 (15)
- ibatis (3)
- jquery (31)
- lucene (1)
- hibernate (14)
- Myeclipse (4)
- 线程 (7)
- jbpm (4)
- 重构 (1)
- mantis (3)
- MediaWiki (4)
- ExtMail (1)
- MDaemon (1)
- egit (1)
- dwr (7)
- sitemesh (2)
- mybatis (1)
- ico (1)
- hadoop (5)
- jsoup (1)
- urlrewrite (2)
- jstl (1)
- spring3 (2)
- aop (2)
- 定时器 (1)
- Quartz (2)
- apache (1)
- php (1)
- security (1)
- iptables (2)
- QQ (1)
- mysqldump (1)
- vim (1)
- memcached (4)
- jad (1)
- 微博 (1)
- html5 (1)
- css3 (1)
- httpclient (10)
- google (1)
- shortUrl (1)
- json (2)
- virtualBox (1)
- mantisBT (2)
- htmlunit (1)
- selenium (2)
- mail (1)
- 正则表达式 (4)
- html (3)
- css (2)
- jatoolsPrinter (1)
- 图片处理 (1)
- hql (1)
- webservice (1)
- 分词 (3)
- 短信 (1)
- VPS (1)
- 事务 (1)
- 广告 (1)
- 画廊 (1)
- git (3)
- github (1)
- openshift (1)
- 缓存 (1)
- web (3)
- android (3)
- c3p0 (1)
- 邮箱 (1)
- memcache (2)
- windows (2)
- js (14)
- 编辑器 (1)
- 打印 (1)
- centos (5)
- boneCP (1)
- 连接池 (1)
- sql (1)
- nosql (1)
- MongoDB (1)
- 浏览器 (1)
- node (1)
- node.js (1)
- backbone.js (1)
- lazyload (1)
- Switch Off (1)
- Titanium (1)
- 网站架构 (1)
- WebDriver (1)
- APJP (1)
- 代理 (1)
- comet (1)
- kendoui (1)
- UI (2)
- 互联网 (1)
- localStorage (1)
- 记录 (1)
- 微信 (2)
- Sphinx (1)
- netty (1)
- js,mvvm,Avalon (1)
- 安卓 (1)
- Tengine (1)
- 大数据 (1)
- 手机 (1)
- paypal (1)
- SaaS (1)
- gitlab (1)
- nodejs (1)
- React (1)
- shadowsocks (0)
- vpn (0)
- 验证码 (1)
- SSL (2)
- SEO (1)
- IntelliJ (1)
- 敏捷开发 (1)
- 项目管理 (1)
- 爬虫 (1)
- 正则 (1)
- owncloud (1)
- 云存储 (1)
- ajax (1)
- pjax (1)
- jdk (1)
- zookeeper (1)
- phantomjs (1)
- ELK (1)
- springcloud (1)
- IDEA (1)
- hexo (1)
- ss (1)
- letencrypt (1)
最新评论
-
peakandyuri:
这个是有BUG的,数字小体现不出来,数字大了就不对了,但是Ja ...
java十进制转换N进制并反转换的工具类 -
ginolai:
然后是相关配置:/etc/sysconfig/iptables ...
Linux中iptables设置详细 -
bzhao:
我测试没啥区别啊!
Thread.sleep()和Thread.currentThread().sleep()区别 -
zhl549342097:
match == false
Spring Security 3.1 中功能强大的加密工具 PasswordEncoder -
hellotieye:
renzhengzhi 写道drager 写道用jsoup后解 ...
jsoup select 选择器
1.首先是一个MyMethod接口,里面只有一个方法看名字就知道了,就是我要做的事情。
package com.test.thread; /** * @author jsczxy2 * */ public interface MyMethod { public void dosomething(); }
2.然后是实现该方法的类,这个类可以自定义实现内容以完成需要放入线程池里面要做的具体事情。
package com.test.thread; /** * @author jsczxy2 * */ public class MyMethodImpl implements MyMethod{ private int count; public MyMethodImpl(int count) { this.count = count; } @Override public void dosomething() { System.out.println("mymethod "+count+" in thread pool!"); } }
3.好了接下来是个简单线程类继承了Thread类,作用就是实例化放进线程池里面的线程,包括往里面加入dosomething具体实现,以及一个while循环实现线程的等待wait()以及通知notify()的调用来实现线程池内某线程的等待还是执行状态。重点是标记running。
package com.test.thread; /** * @author jsczxy2 * */ public class SimpleThread extends Thread{ private volatile boolean running; private volatile int threadNumber; private volatile MyMethod myMethod; public SimpleThread() { } public SimpleThread(int number) { this.threadNumber = number; System.out.println("SimpleThread:"+threadNumber+" start!"); } public boolean isRunning() { return running; } public synchronized void setRunning(boolean running) { this.running = running; if(running) this.notify(); } public void setThreadNumber(int threadNumber) { this.threadNumber = threadNumber; } public int getThreadNumber() { return threadNumber; } public synchronized void setMyMethod(MyMethod myMethod) { this.myMethod = myMethod; } public MyMethod getMyMethod() { return myMethod; } public synchronized void dosomething(){ if(getMyMethod()!=null) getMyMethod().dosomething(); } @Override public synchronized void run() { try { while (true) { if (!isRunning()) { System.out.println("SimpleThread:"+threadNumber+" wait!"); this.wait(); } else { System.out.println("SimpleThread:"+threadNumber+" run!"); dosomething(); Thread.sleep(1000L); setRunning(false); } } } catch (InterruptedException e) { e.printStackTrace(); } } }
4.最后是线程池类,我用一个list类进行线程存储,初始化线程池时根据poolsize初始化线程加进该list,然后直接设置running为false,这样启动start()后导致初始化时所有线程池里的线程都是wait()状态,等待被通知notify()。而execute方法则查找当前线程池中空闲线程,然后把dosomething交给这个线程去处理。
package com.test.thread; import java.util.ArrayList; import java.util.List; /** * @author jsczxy2 * */ public class ThreadPool { private int poolsize=10; //工作线程 private List<SimpleThread> threads = new ArrayList<SimpleThread>(); public ThreadPool() { init(); } public ThreadPool(int poolsize) { this.poolsize = poolsize; init(); } private void init(){ for(int i = 0;i < poolsize;i ++){ SimpleThread thread = new SimpleThread(i); thread.setRunning(false); threads.add(thread); thread.start(); } } public synchronized void execute(MyMethod myMethod){ while(true){ for(SimpleThread thread : threads){ if(!thread.isRunning()){ thread.setMyMethod(myMethod); thread.setRunning(true); return; } } } } public static void main(String[] args) { ThreadPool pool = new ThreadPool(); for(int i=0;i<100;i++){ pool.execute(new MyMethodImpl(i)); } } }
发表评论
-
[转]Spring Cloud微服务的那点事
2018-04-20 21:58 625转自:https://blog.csdn.ne ... -
[转]ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
2018-04-20 17:10 846本文转自:https://my.oschin ... -
生成无重复的hashid短地址(短随机字符串)
2017-04-26 14:57 2132具体查看项目: http://hashids.org/j ... -
2017年Struts漏洞修复:版本从2.3.15.1升级到2.3.32
2017-03-24 15:10 1942如果你当前的项目使用了Struts2.3.5至 Strut ... -
多线程爬虫Miner [转]
2016-08-01 13:49 804多线程爬虫Miner 本文转自原作者博客:http:/ ... -
JAVA关键字替换
2015-11-03 21:22 1010import java.util.ArrayList; ... -
关于java web前后端分离
2015-08-27 22:47 1899由于公司架构上需要前后端分离,这里先记录一下相关内容,待后 ... -
基于NODEJS的前后端项目分离实践
2015-06-17 14:07 1141前后端分离项目实践 本文转自:http://jiangxi ... -
paypal IPN返回
2015-05-28 10:12 20141.设定返回的地址 目标:登录paypal-->用户 ... -
根据class搜索jar包
2015-05-20 13:00 825http://grepcode.com/ -
基于DWR的点对点聊天实现 server---client
2015-04-28 16:53 1056本文转自:http://htj1231825.iteye.c ... -
Java分布式中文分词组件word分词v1.2发布
2015-04-20 12:07 762word分词是一个Java实现的分布式的中文分词组件,提供了 ... -
java开源论坛jeebbsV4发布
2015-04-08 09:56 586论坛APP的帖子新展现形式 APP即时聊天模块 ... -
开源大数据解决方案
2015-03-12 13:01 1029解决方案 开发商 类型 描述 Storm Twit ... -
根据用户IP查询所属国家(数据库版)-geoip
2015-03-06 14:44 1149关键词:geoip,最新版本GeoIP2 http:// ... -
查询用户IP所在地服务接口(淘宝)
2015-03-04 10:17 1029import java.io.BufferedReader; ... -
java内存溢出优化
2014-12-28 12:42 2145本文转自:http://www.importnew.com ... -
Tomcat6线程池(Executor Thread pool)的配置
2014-12-27 01:07 884原文地址:http://www.java2000.net/p ... -
Netty学习系列导航-开源Java高性能NIO框架推荐
2014-08-13 17:49 1308纯记录,事件驱动服务器和客户端设计: http://mus ... -
破解验证码相关:用imagemagick和tesseract-ocr破解简单验证码
2014-08-13 17:08 2919本文源自:http://hooopo.iteye.com/ ...
相关推荐
用java实现的线程池,自己是初学着,程序参考网上。
java聊天室,利用线程池实现多用户聊天室
java实现通用的线程池,这是我网上找的资料,O(∩_∩)O~希望大家能用的到。
本文旨在使用Java语言编写一个通用的线程池。当需要使用线程池处理事务时,只需按照指定规范封装好事务处理对象,然后用已有的线程池对象去自动选择空 闲线程自动调用事务处理对象即可。并实现线程池的动态修改...
Java实现通用线程池
自定义实现Java线程池,学习大师设计思想,瞻仰大神笔法
这段代码实现了一个简单的线程池ExecutorService,其中使用了Java的匿名内部类。在类的构造方法中,首先创建了一个固定大小为5的线程池。然后通过循环提交了10个任务到线程池中执行。每个任务都是一个匿名内部类实现...
[1]中博主自己通过ThreadGroup实现一个线程池(挺方便理解的),使用的是jdk1.4版本,Jdk1.5版本以上提供了现成的线程池。 [2]中介绍了java.util.concurrent.Executors类的API。 [3]中介绍了Java中线程池的类体系...
java技术学习——基于Java线程池技术实现Knock Knock游戏项目(包含服务端、客户端两部分) java技术学习——基于Java线程池技术实现Knock Knock游戏项目(包含服务端、客户端两部分) java技术学习——基于Java...
Java版线程池实现
NULL 博文链接:https://yulincqupt.iteye.com/blog/1673919
Java开发,Android开发,自己实现线程池,明白线程池的实现机制
NULL 博文链接:https://j2ee2009.iteye.com/blog/689161
任意类实现Runnable接口,则可使用 先构造ThreadPool对象,然后调用其execute方法,将自己的线程作为参数传入即可(注意,不能让你的线程开启) 支持最小线程数 支持最大线程数(线程增加后不会减少) 支持线程增长...
java线程池Executors实现数据批量操作。 批量异步Executors处理数据,实现限流操作,QPS限流。 线程池调用第三方接口限流实现逻辑。 案例适合: 1.批量处理大数据。 2.数据批量导出。 3任务数据异步执行。 4.多线程...
基于Java线程池技术实现Knock Knock游戏项目.zip 基于Java线程池技术实现Knock Knock游戏项目.zip 基于Java线程池技术实现Knock Knock游戏项目.zip 基于Java线程池技术实现Knock Knock游戏项目.zip 基于Java线程池...
java简单线程池的实现,使用jdk的Executors.newFixedThreadPool方法来实现固定大小线程池
1. 初始化线程执行提交的任务 2. 任务执行不过来,放入工作队列 3. 任务过多,线程和队列均处理不过来,拒绝执行(本文中将抛出RejectedExecuti
java线程池的原理和实现,挺全面的,分享给大家!
运用JAVA的concurrent.ExecutorService线程池实现socket的TCP和UDP连接