1.如果想同时产生多个请求,定时器是否可以实现呢?比如模拟客户向数据库发送大量请求。还是说用多线程实现。
2.产生多个线程,是否表示每个线程是一个请求?
3.定时器定时执行一个任务,比如每隔几毫秒执行一个大任务,是否可以表示多客户端的请求?这些任务是并发执行的呢还是顺序执行的?应该是一个一个顺序执行的吧,但是如果每个任务需要很长时间,那么后面的任务是否能够在定时器间隔时间后按时执行呢?
4.定时器定时执行任务时,是新建了一个线程执行新任务,还是用原来的老线程继续执行新任务呢?
2.产生多个线程,是否表示每个线程是一个请求?
3.定时器定时执行一个任务,比如每隔几毫秒执行一个大任务,是否可以表示多客户端的请求?这些任务是并发执行的呢还是顺序执行的?应该是一个一个顺序执行的吧,但是如果每个任务需要很长时间,那么后面的任务是否能够在定时器间隔时间后按时执行呢?
4.定时器定时执行任务时,是新建了一个线程执行新任务,还是用原来的老线程继续执行新任务呢?
2、每个线程代表一个请求
3、每个任务都是一个线程,有顺序的,可以并发
4、Timer是一个线程,每个TimerTask都是独立的线程
1、可以模拟的,能否讲的具体一些?
3.4 中的任务应该是 private TimerTask task = new TimerTask() { //定时任务
吧?这句表示产生一个任务,并且在我们自己写的定时器的类里面,我看了一下这句没有用到创建线程的那个语句,所以
3、每个任务都是一个线程,有顺序的,可以并发
4、Timer是一个线程,每个TimerTask都是独立的线程
这个是不是不太准确啊?是否只有Timer一个线程呢?
就是Timer每隔x毫秒向lis发送事件,lis启动一个程序流程,这个程序的流程是你自己定义的,但是不管怎么定义他都是运行在一个新的线程上的.
如果你想模拟多用户并发可以这么做
..............................
public class Twork implements Actionlistner{Twork(){}
public void actionPerformed(){
//在这个方法中写你的业务逻辑
}
}Twork tw= new Twork();
Timer tm= new Timer (1000,tw);
tm.start;
...................
这样就可以每1秒钟启动一个你需要的处理业务逻辑的流程(在一个新的线程上).
//在这个方法中写你的业务逻辑
} //忘了写参数了
Timer tm= new Timer (1000,tw);
tm.start;
...................
这样就可以每1秒钟启动一个你需要的处理业务逻辑的流程(在一个新的线程上).
查了一下Timer类的源码,好像不是执行新的线程吧?你从哪句看出来Timer执行任务时创建新的线程?麻烦贴一下源码看看?谢谢!
等 级:
发表于:2007-12-17 11:51:441楼 得分:0
1.定时器本身内置一个线程来管理和执行任务,如果你在任务里额外启动线程,每个线程里分别发送一个请求的话,可以实现
2.要看每个请求是否属于这个线程,如果只有一个连接,多个线程,似乎结果还是一个连接
3.同一个定时器内的任务是一个接一个执行的,如果前面一个任务执行时间长,则会影响到后面的任务,假设一个任务里写一个死循环,那么后面的任务永远也执行不到
排除死循环,定时器有一个休正时间的任务执行方式,添加任务到定时器的时候使用 scheduleAtFixedRate 方法就可以了
4.见1,每个Timer内置一个线程,除非你的任务代码里另外开线程,否则只有那一个线程
和wuxiao_v: 说的不一样啊。
到底是怎么个详细情况呢?你们俩谁的说法合理一些?
1,写一个GUI界面上边有两个textfiled tf1和tf2,两个button btn1,btn2;2,然后再用两个Timer类作两套服武器分别再两个tf上显示 i的值 ,i+=10,(btn启动用);你会发现两个tf上都的数字都会不断变化,而且激活后两个btn都处于可用状态(非假死状态).然后你在作另外一个试验1,同样的GUI和服务,只是不用Timer控制而是用循环控制数字的变化,你看看你按了一个btn之后还有没有机会按第二个.
等 级:
发表于:2007-12-17 11:51:441楼 得分:0
1.定时器本身内置一个线程来管理和执行任务,如果你在任务里额外启动线程,每个线程里分别发送一个请求的话,可以实现
2.要看每个请求是否属于这个线程,如果只有一个连接,多个线程,似乎结果还是一个连接
3.同一个定时器内的任务是一个接一个执行的,如果前面一个任务执行时间长,则会影响到后面的任务,假设一个任务里写一个死循环,那么后面的任务永远也执行不到
排除死循环,定时器有一个休正时间的任务执行方式,添加任务到定时器的时候使用 scheduleAtFixedRate 方法就可以了
4.见1,每个Timer内置一个线程,除非你的任务代码里另外开线程,否则只有那一个线程
和wuxiao_v: 说的不一样啊。
到底是怎么个详细情况呢?你们俩谁的说法合理一些?
----------------------------------
这不和我说的一样么
..............................
public class Twork implements Actionlistner{ Twork(){}
public void actionPerformed(){
//在这个方法中写你的业务逻辑,(业务逻辑中包括启动一个新的线程)
}
} Twork tw= new Twork();
Timer tm= new Timer (1000,tw);
tm.start;
...................
这样就可以每1秒钟启动一个你需要的处理业务逻辑的流程(在一个新的线程上).
Timer中有一个固有的线程,这个线程的作用是启动新的线程(对于你的程序来说)
各位先去看看jdk下带的Timer及TimerTask的源码
不要误导人
你会发现Timer.java里有一个TimerThread类,就很容易搞明白了 我已经看了Timer.java里有一个TimerThread类,这样说你的说法应该是正确的? wuxiao_v 可能有错误吧! Timer的作用是每隔一定时间启动一个线程,这个线程的起点是Timer构造函数的那个监听器
new Timer(int x, xxlistner lis)
就是Timer每隔x毫秒向lis发送事件,lis启动一个程序流程,这个程序的流程是你自己定义的
,但是不管怎么定义他都是运行在一个新的线程上的.
应该不会随随便便就启动新线程的吧 ?
//这个类是监听器他的作用是受到Timer的激发,然后执行actionPerformed中的方法Twork(){}
public void actionPerformed(ActionEvent e){
Userwork uk=new Userwork();
uk.start;
}
} public class Userwork extends Thread{
//这个类就是你传说中的客户线程
public run(){
//你的业务流程
//这个方法是 Thread的固有方法,这个方法的内容会在一个新的线程里执行
}}
public class TestMain(){
//这个类是程序的入口public static void main(String args[]){Twork tw= new Twork();
Timer tm= new Timer (1000,tw);
tm.start; }
}
//不知道这么写你还明白不,如果还不明白加我QQ53737652
你会发现Timer.java里有一个TimerThread类,就很容易搞明白了 我已经看了Timer.java里有一个TimerThread类,这样说你的说法应该是正确的? wuxiao_v 可能有错误吧! Timer的作用是每隔一定时间启动一个线程,这个线程的起点是Timer构造函数的那个监听器
new Timer(int x, xxlistner lis)
就是Timer每隔x毫秒向lis发送事件,lis启动一个程序流程,这个程序的流程是你自己定义的
,但是不管怎么定义他都是运行在一个新的线程上的.
应该不会随随便便就启动新线程的吧 ? //确实是我错了,Timer启动的流程是运行在Timer内部固有的那个线程上的,API有时候说的不够详细,研究src确实是一种好方法.
程序中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);
}
我是直接这么写的 这个该怎么解释
public static void main(String[] args) {
TestTimer t = new TestTimer();
t.qunfa();
t.qunfa2();
}
public void qunfa() {
Timer timer = new Timer();
TimerTask task = new TestTimerTask();
timer.schedule(task, 100L, 10*1000L);
}
public void qunfa2(){
Timer timer = new Timer();
TimerTask task = new TestTimerTask2();
timer.schedule(task, 100L, 1*1000L);
}