- 浏览: 1275501 次
- 性别:
- 来自: 常州
文章分类
- 全部博客 (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 682转自:https://blog.csdn.ne ... -
[转]ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台
2018-04-20 17:10 884本文转自:https://my.oschin ... -
生成无重复的hashid短地址(短随机字符串)
2017-04-26 14:57 2198具体查看项目: http://hashids.org/j ... -
2017年Struts漏洞修复:版本从2.3.15.1升级到2.3.32
2017-03-24 15:10 2014如果你当前的项目使用了Struts2.3.5至 Strut ... -
多线程爬虫Miner [转]
2016-08-01 13:49 838多线程爬虫Miner 本文转自原作者博客:http:/ ... -
JAVA关键字替换
2015-11-03 21:22 1054import java.util.ArrayList; ... -
关于java web前后端分离
2015-08-27 22:47 1940由于公司架构上需要前后端分离,这里先记录一下相关内容,待后 ... -
基于NODEJS的前后端项目分离实践
2015-06-17 14:07 1204前后端分离项目实践 本文转自:http://jiangxi ... -
paypal IPN返回
2015-05-28 10:12 20671.设定返回的地址 目标:登录paypal-->用户 ... -
根据class搜索jar包
2015-05-20 13:00 883http://grepcode.com/ -
基于DWR的点对点聊天实现 server---client
2015-04-28 16:53 1142本文转自:http://htj1231825.iteye.c ... -
Java分布式中文分词组件word分词v1.2发布
2015-04-20 12:07 809word分词是一个Java实现的分布式的中文分词组件,提供了 ... -
java开源论坛jeebbsV4发布
2015-04-08 09:56 621论坛APP的帖子新展现形式 APP即时聊天模块 ... -
开源大数据解决方案
2015-03-12 13:01 1073解决方案 开发商 类型 描述 Storm Twit ... -
根据用户IP查询所属国家(数据库版)-geoip
2015-03-06 14:44 1195关键词:geoip,最新版本GeoIP2 http:// ... -
查询用户IP所在地服务接口(淘宝)
2015-03-04 10:17 1081import java.io.BufferedReader; ... -
java内存溢出优化
2014-12-28 12:42 2202本文转自:http://www.importnew.com ... -
Tomcat6线程池(Executor Thread pool)的配置
2014-12-27 01:07 920原文地址:http://www.java2000.net/p ... -
Netty学习系列导航-开源Java高性能NIO框架推荐
2014-08-13 17:49 1349纯记录,事件驱动服务器和客户端设计: http://mus ... -
破解验证码相关:用imagemagick和tesseract-ocr破解简单验证码
2014-08-13 17:08 2960本文源自:http://hooopo.iteye.com/ ...
相关推荐
用java实现的线程池,自己是初学着,程序参考网上。
PooledThread是一个线程类,继承自Thread类,用于实现线程池中的线程;ThreadPool是一个线程池类,用于管理线程池中的线程。 ThreadTask接口定义了一个run方法,用于执行线程池任务;PooledThread类继承自Thread类...
Java聊天室是一个典型的多用户实时交互系统,它利用了Java的网络编程能力以及并发处理机制,特别是线程池技术,来实现多个用户之间的同步通信。在这个项目中,我们将深入探讨如何构建这样一个聊天室,以及线程池在...
部分内容中提供了一个完整的 Java 线程池实现代码,包括配置文件的解析、线程池的创建和管理等方面。 一、配置 xml 文件 配置文件 `listen.xml` 中定义了线程池的最小和最大线程数、检查线程池中线程的周期等参数...
标题中的“Java实现的线程池、消息队列功能”是指在Java编程中,如何利用编程技术实现线程池和消息队列这两种重要的并发处理机制。线程池和消息队列是解决多线程环境下资源管理和任务调度的有效手段,它们在高并发、...
java实现通用的线程池,这是我网上找的资料,O(∩_∩)O~希望大家能用的到。
本文旨在使用Java语言编写一个通用的线程池。当需要使用线程池处理事务时,只需按照指定规范封装好事务处理对象,然后用已有的线程池对象去自动选择空 闲线程自动调用事务处理对象即可。并实现线程池的动态修改...
通过上述步骤,我们已经成功地实现了一个简单的自定义Java线程池。虽然这个实现非常基础,但它涵盖了线程池的主要设计思想和技术要点。对于更复杂的应用场景,建议使用成熟的线程池框架,如`ThreadPoolExecutor`,它...
我们也将遵循这个设计,实现一个简单的线程池类`SampleThreadPoolExecutor`,它继承自`Executor`接口。 在`SampleThreadPoolExecutor`类中,我们需要关注以下几个关键属性: 1. `wc`: 工作中的线程数量 2. `...
在示例代码中,作者使用简单的Java代码创建了一个线程池,通过`ThreadPoolManager`类来管理线程池,并使用`SimpleThread`类作为处理任务的线程。 【示例代码分析】 1. `TestThreadPool`类是测试类,模拟客户端发送...
本文将详细介绍如何使用Java语言来构建一个简单的线程池,并深入分析其实现原理与关键细节。 #### 一、线程池的概念 线程池是一种基于池化技术的设计模式,其核心思想是在程序启动时创建一定数量的线程放入池中供...
java技术学习——基于Java线程池技术实现Knock Knock游戏项目(包含服务端、客户端两部分) java技术学习——基于Java线程池技术实现Knock Knock游戏项目(包含服务端、客户端两部分) java技术学习——基于Java...
2. newSingleThreadExecutor:创建一个单线程线程池,所有任务都在一个线程中顺序执行,保证了任务的执行顺序。 3. newFixedThreadPool:创建一个固定大小的线程池,线程数量保持不变,任务排队等待执行。 4. ...
1. **定义配置参数**:创建一个配置类,包含线程池的各个参数,如核心线程数、最大线程数等。 2. **创建线程池实例**:根据配置参数,使用`ThreadPoolExecutor`构造函数创建线程池实例。 3. **提供提交任务接口**:...
不过,上述代码展示的是一个自定义的线程池实现,它可能没有使用Java标准库中的`ExecutorService`。 这个自定义线程池的实现包括以下几个关键组件: 1. **线程池参数**: - `reserve`:保留线程数,这些线程不...
NULL 博文链接:https://yulincqupt.iteye.com/blog/1673919
Java开发,Android开发,自己实现线程池,明白线程池的实现机制