日期:2014-05-20  浏览次数:20742 次

看java多线程和定时器,有些疑惑,望朋友们指教,谢谢。
1.如果想同时产生多个请求,定时器是否可以实现呢?比如模拟客户向数据库发送大量请求。还是说用多线程实现。
2.产生多个线程,是否表示每个线程是一个请求?
3.定时器定时执行一个任务,比如每隔几毫秒执行一个大任务,是否可以表示多客户端的请求?这些任务是并发执行的呢还是顺序执行的?应该是一个一个顺序执行的吧,但是如果每个任务需要很长时间,那么后面的任务是否能够在定时器间隔时间后按时执行呢?
4.定时器定时执行任务时,是新建了一个线程执行新任务,还是用原来的老线程继续执行新任务呢?


------解决方案--------------------
1、可以模拟的
2、每个线程代表一个请求
3、每个任务都是一个线程,有顺序的,可以并发
4、Timer是一个线程,每个TimerTask都是独立的线程
------解决方案--------------------
Timer的作用是每隔一定时间启动一个线程,这个线程的起点是Timer构造函数的那个监听器 new Timer(int x, xxlistner lis)
就是Timer每隔x毫秒向lis发送事件,lis启动一个程序流程,这个程序的流程是你自己定义的,但是不管怎么定义他都是运行在一个新的线程上的.
------解决方案--------------------
多看少说
各位先去看看jdk下带的Timer及TimerTask的源码
不要误导人
------解决方案--------------------
1.如果想同时产生多个请求,定时器是否可以实现呢?比如模拟客户向数据库发送大量请求。还是说用多线程实现。 
程序中for(int i=0;i<N;i++)
{
Thread thread = new Thread();
}
这样产生多个线程的操作已经可以模拟同时发送多个请求了,因为For循环的时间基本上是忽略不计的,用定时器当然也可以,但是个人感觉没有必要了

2.产生多个线程,是否表示每个线程是一个请求? 
当然每个线程是一个请求

3.定时器定时执行一个任务,比如每隔几毫秒执行一个大任务,是否可以表示多客户端的请求?这些任务是并发执行的呢还是顺序执行的?应该是一个一个顺序执行的吧,但是如果每个任务需要很长时间,那么后面的任务是否能够在定时器间隔时间后按时执行呢? 
在问题1中已进行了描述,For循环开多线程的时间完全可以认为这些线程是同时执行的

4.定时器定时执行任务时,是新建了一个线程执行新任务,还是用原来的老线程继续执行新任务呢? 
根据你的描述,肯定应该新建新的线程执行请求,为什么要用原来的线程呢?如果需要线程调度的话,JDK5的线程池API已经足够我们用了:
public class MyTimerTaskThread extends TimerTask
{

@Override
public void run() {
// your thread method

}

}

public static void main(String[] args) throws IOException
{
Timer timer = new Timer();
timer.schedule(new MyTimerTaskThread(),100);
}