看java多线程和定时器,有些疑惑,望朋友们指教,谢谢。
1.如果想同时产生多个请求,定时器是否可以实现呢?比如模拟客户向数据库发送大量请求。还是说用多线程实现。
2.产生多个线程,是否表示每个线程是一个请求?
3.定时器定时执行一个任务,比如每隔几毫秒执行一个大任务,是否可以表示多客户端的请求?这些任务是并发执行的呢还是顺序执行的?应该是一个一个顺序执行的吧,但是如果每个任务需要很长时间,那么后面的任务是否能够在定时器间隔时间后按时执行呢?
4.定时器定时执行任务时,是新建了一个线程执行新任务,还是用原来的老线程继续执行新任务呢?
1.如果想同时产生多个请求,定时器是否可以实现呢?比如模拟客户向数据库发送大量请求。还是说用多线程实现。
2.产生多个线程,是否表示每个线程是一个请求?
3.定时器定时执行一个任务,比如每隔几毫秒执行一个大任务,是否可以表示多客户端的请求?这些任务是并发执行的呢还是顺序执行的?应该是一个一个顺序执行的吧,但是如果每个任务需要很长时间,那么后面的任务是否能够在定时器间隔时间后按时执行呢?
4.定时器定时执行任务时,是新建了一个线程执行新任务,还是用原来的老线程继续执行新任务呢?
2.要看每个请求是否属于这个线程,如果只有一个连接,多个线程,似乎结果还是一个连接
3.同一个定时器内的任务是一个接一个执行的,如果前面一个任务执行时间长,则会影响到后面的任务,假设一个任务里写一个死循环,那么后面的任务永远也执行不到
排除死循环,定时器有一个休正时间的任务执行方式,添加任务到定时器的时候使用 scheduleAtFixedRate 方法就可以了
4.见1,每个Timer内置一个线程,除非你的任务代码里另外开线程,否则只有那一个线程
回复:
1。那么模拟对数据库的请求,你说是怎么的解决方法好,我看有的文章上面直接用循环建立线程,没有用到定时器。
2。多个线程使用一个连接,他们的执行情况也应该是并发的吧,使用一个连接难道不是多用户请求吗?
^_^
等 级:
发表于:2007-12-18 20:41:064楼 得分:0
Timer的作用是每隔一定时间启动一个线程,这个线程的起点是Timer构造函数的那个监听器 new Timer(int x, xxlistner lis)
就是Timer每隔x毫秒向lis发送事件,lis启动一个程序流程,这个程序的流程是你自己定义的,但是不管怎么定义他都是运行在一个新的线程上的.
^_^
等 级:
发表于:2007-12-18 20:41:064楼 得分:0
Timer的作用是每隔一定时间启动一个线程,这个线程的起点是Timer构造函数的那个监听器 new Timer(int x, xxlistner lis)
就是Timer每隔x毫秒向lis发送事件,lis启动一个程序流程,这个程序的流程是你自己定义的,但是不管怎么定义他都是运行在一个新的线程上的.
和redduke1202 说的不一样,谁的正确呢?
如果模拟每个并发请求不是连续的,则可以在每个线程里面使用定时器,这样就可以模拟出如下场景
1 XX个人员在同时使用一个系统
2 他们按照各自的习惯,固定的发出请求如果处理过程不是很长,则极端情况,服务器会瞬间需要同时处理XX个请求,来测试并发性能!
这样说,定时器应该是一个线程吧?
随便看看Timer和TimerTask及TimerThread的源码(都在%JDK%\src.zip里)
你会发现Timer.java里有一个TimerThread类,就很容易搞明白了
你会发现Timer.java里有一个TimerThread类,就很容易搞明白了我已经看了Timer.java里有一个TimerThread类,这样说你的说法应该是正确的? wuxiao_v 可能有错误吧! Timer的作用是每隔一定时间启动一个线程,这个线程的起点是Timer构造函数的那个监听器
new Timer(int x, xxlistner lis)
就是Timer每隔x毫秒向lis发送事件,lis启动一个程序流程,这个程序的流程是你自己定义的
,但是不管怎么定义他都是运行在一个新的线程上的.
应该不会随随便便就启动新线程的吧 ?
可以参考使用 loadRunner 进行并发性能测试的思想