“池”技术对我们来说是非常熟悉的一个概念,它的引入是为了在某些场景下提高系统某些关键节点性能,最典型的例子就是数据库连接池,JDBC是一种服务供应接口(SPI),具体的数据库连接实现类由不同厂商实现,数据库连接的建立和销毁都是很耗时耗资源的操作,为了查询数据库中某条记录,最原始的一个过程是建立连接、发送查询语句、返回查询结果、销毁连接,假如仅仅是一个很简单的查询语句,那么可能建立连接与销毁连接两个...
分类:
编程语言 时间:
2015-01-24 20:08:02
阅读次数:
225
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Threading;
namespaceConsoleApplication5
{
classProgram
{
staticvoidMain(string[]args)
{
inta;
intb;
ThreadPool.GetMaxThreads(outa,outb..
分类:
编程语言 时间:
2015-01-24 18:52:09
阅读次数:
196
问题:
在使用线程池处理客户端请求时发现不能获取到客户端的ip!
原因:
由于在server_loop注循环中只把连接字sock加到queue队列中,并没有客户端IP,所以每一次queue回调函数只能取得sock连接字,没有客户端的ip
解决方法:
在将sock加入queue队列的同时把ip也加入到ips队列中,ips队列的长度和queue相同,而且存的数据下标要...
分类:
编程语言 时间:
2015-01-24 15:56:49
阅读次数:
290
线程池的原理和实现 一. 线程池的简介 通常我们使用多线程的方式是,需要时创建一个新的线程,在这个线程里执行特定的任务,然后在任务完成后退出。这在一般的应用里已经能够满足我们应用的需求,毕竟我们并不是什么时候都需要创建大量的线程,并在它们执行一个简单的任务后销毁。 但是在一些web、ema...
分类:
编程语言 时间:
2015-01-23 12:53:53
阅读次数:
132
单例模式其实就是保证一个类的实例只有一个,并提供一个全局访问点,常用于管理共享资源,例如线程池,数据库连接池等等。 单例模式最重要的特点就是, 1.构造方法是private的(无法从其他类实例化该类的对象) 2.类内部有一个该类的静态的实例以及一个产生该类实例的静态方法。(提供一个全局访问点...
分类:
其他好文 时间:
2015-01-23 10:56:29
阅读次数:
93
多线程和并发性并不是Java的什么新内容,Java封装了与线程相关的类库,核心类库包含一个 Thread 类,可以用它来构建、启动和操纵线程。当然Java官方更推荐的是通过实现Runnable方法实现多线程,因为他更容易使用,可读性更强,而且可以复用线程池带来更高的性能。
Java 语言包括了跨线程传达并发性约束的构造—— synchronized 和 volatile 。在简化与平台无关的并发...
分类:
编程语言 时间:
2015-01-22 15:27:42
阅读次数:
288
停止基于服务的线程 应用程序通常会创建拥有服务的线程, 比如线程池. 这些服务的存在时间通常要比创建他们的方法存在的时间更长, 如果应用程序优雅的退出了,这些服务的线程也需要结束.因为没有退出线程惯用的优先方法, 他们需要自行结束. 明智的封装实践指出,你不应该操控某个线程一一中断它,改变他的优.....
分类:
编程语言 时间:
2015-01-21 19:47:22
阅读次数:
234
Java对多线程的支持还是比较给力的,JDK1.6里面有现成的API可用,一般的多线程应用足够了,
使用的时候注意最好加一层壳子,至少方便日志打印和后续扩展,以下是一个简单的启用的例子
1. 定义线程池变量
//线程池维护线程的最少数量: 2;//线程池维护线程的最大数量: 100;//线程池维护线程所允许的空闲时间: 2s;//线程池维护线程所允许的空闲时间的单位: TimeUnit.SE...
分类:
编程语言 时间:
2015-01-21 11:43:18
阅读次数:
251
本文前半部分结论存在严重错误,请看最后2015-1-20更新部分。最近一直在解决线上一个问题,表现是:Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s。服务器性能很好,Tomcat版本是7.0.54,配置如下: 事后...
分类:
编程语言 时间:
2015-01-20 20:14:47
阅读次数:
243
本文可作为传智播客《张孝祥-Java多线程与并发库高级应用》视频的学习记录。
为什么需要并发池
之前写并发的时候
new Thread(new Runnable(){
public void run{
//....
}
}).start();没有什么问题呀,为什么需要并发池呢?
我们拿tomcat来举个例子。每次我们对服务器做一个请求,tomcat就得分出一个线...
分类:
编程语言 时间:
2015-01-19 19:09:52
阅读次数:
260