多线程, 如何令某个线程停止一段指定的时间,然后继续运行 比如,有3个帐号登录的模拟线程,启用多线程分配给每个帐号,以各自执行某个任务,当任务完成第一步时候,让线程停止一段时间(各线程互不影响),然后继续。请教各位,麻烦最好给个代码片段,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 还在学习中不是用sleep方法可以让线程休息吗Thread.sleep(1000); ]synchronized{'''''Thread.sleep(XXXXXXX);} 没有互斥资源的话 sleep有的话 wait Thread.sleep(1000);this.wait();this.yield();this.jion();其中的this是Thread或者Runnable的子类/实现类,也就是你希望延时的那个线程 不是用sleep方法可以让线程休息吗Thread.sleep(1000); 同步!使用sleep方法就可以实现 比如,一个备份操作,不需要每秒备份,可能隔一个钟头一次。是否,用线程来实现并不妥当? 用 Quartz 来实现更好?问题是,我的实际需要并不是做备份这样的事情,是这样一个应用,自动登录帐号,每隔N秒发表一篇文章,当发送文章数量达到N个时,线程退出。 Thread.sleep(1000);正好是干这个的, 用sleep(跟着的毫秒数);让线程睡上你指定的毫秒数 没有互斥资源的话 sleep有的话 wait同意这个,有时候利用SMTP连接远程服务器发送邮件,比如N多邮件,你用一个FOR循环去遍历EMAIL地址,然后发送,他几秒就循环完了,发送速度不可能有那么快,有的服务器来不及销毁会话,就报错,这情况,定义一个标记,到一定情况后,线程停一下, 拙见 quartz就是为你这类任务而生的 当然不能让一个线程在哪里睡觉了,这样会导致一个线程长时间地被占用,增加线程调度的负担。建议使用 Quartz Thread.sleep(1000); 这个就可以 这里的应用不是在服务端,要用在Swing桌面程序上,所以必须要考虑同界面交互的问题。请大侠继续发表高论,不吝赐教! Quartz 这是什么东西啊?? 确如阁下所述如此简单吗?sleep 是否能够保证时间上的精确?(如间隔1200毫秒,不超过,不少于) java.util.concurrent.ScheduledExecutorService 就能满足你的需求。 在想暂停的地方加如下代码就可以了: try { Thread.sleep(1000); //暂停1秒。 } catch(Exception e) { System.out.println("A Interrupted"); } 这个很简单吧,还是理解错了lz的意思,看看下面代码:class Processor extends Thread{ private String user; private DoSomething doing; public Processor(String user){ this.user = user; doing = new DoSomething(); } public void run(){ doing.step1(user); //做完第一步,等待 Thread.spleep(1000);//等待1秒 doing.step2(user); 。 }}class DoSomething{ void step1(String user){} void step2(String user){} ......}三个帐号同时登录,相当于:new Processor(a).start();// a用户登录后启动线程new Processor(b).start();// b用户登录后启动线程new Processor(c).start();// c用户登录后启动线程每个用户线程中做了第一步都等待了一段时间。 表达不清楚,不知道题意。任何一个多线程都有这种功能嘛。synchronize都能实现 synchronize? 同步?Oh , no, not about this. Thead.sleep() 如果想精确控制时间,可以用 TimeUnit 这个类。 public class Task implements Runnable { private String username; private String password; private StringBuffer o; public Task(String username, String password, StringBuffer o){ this.username = username; this.password = password; this.o = o; } @Override public void run() { step1(); while(true){ try { Thread.sleep(1000); step2(); } catch (InterruptedException e) { e.printStackTrace(); } } } private void step1(){ } private void step2(){ synchronized(o){ System.out.println(Thread.currentThread() + " "+o.reverse().toString()); } }} 如果LZ是想每隔一段时间触发一次事件,那么我建议楼主使用java.util.Timer类,这个比线程自己实现要简单的多,虽然说也是线程,起码实现好了的,呵呵 没有互斥资源的话 sleep有的话 wait觉得这句话对! 在JAVA中有委托这个专业术语吗? java操作指定list问题 toArray()功能的实现 【整理一下】那个让他失败的面试题 eclipse能不能实现vb式的控件拖放来进行图形用户界面构建 SWT程序资源使用太高 关于类的访问修饰符private 是不是有什么函数可以禁止java的消息传递??? 这样的逻辑,SQL语句怎么写呢?高手指教 多线程的问题讨论(100分): int year = Integer.parseInt(args[0]);是什么意思? 组件的靠右侧对齐
Thread.sleep(1000);
synchronized{
'''''
Thread.sleep(XXXXXXX);
}
有的话 wait
this.wait();
this.yield();
this.jion();其中的this是Thread或者Runnable的子类/实现类,也就是你希望延时的那个线程
不是用sleep方法可以让线程休息吗
Thread.sleep(1000);
比如,一个备份操作,不需要每秒备份,可能隔一个钟头一次。是否,用线程来实现并不妥当? 用 Quartz 来实现更好?问题是,我的实际需要并不是做备份这样的事情,是这样一个应用,自动登录帐号,每隔N秒发表一篇文章,当发送文章数量达到N个时,线程退出。
有的话 wait同意这个,有时候利用SMTP连接远程服务器发送邮件,比如N多邮件,你用一个FOR循环去遍历EMAIL地址,然后发送,他几秒就循环完了,发送速度不可能有那么快,有的服务器来不及销毁会话,就报错,这情况,定义一个标记,到一定情况后,线程停一下, 拙见
当然不能让一个线程在哪里睡觉了,这样会导致一个线程长时间地被占用,增加线程调度的负担。建议使用 Quartz
这里的应用不是在服务端,要用在Swing桌面程序上,所以必须要考虑同界面交互的问题。请大侠继续发表高论,不吝赐教!
确如阁下所述如此简单吗?sleep 是否能够保证时间上的精确?(如间隔1200毫秒,不超过,不少于)
try {
Thread.sleep(1000); //暂停1秒。
} catch(Exception e) {
System.out.println("A Interrupted");
}
class Processor extends Thread{
private String user;
private DoSomething doing;
public Processor(String user){
this.user = user;
doing = new DoSomething();
}
public void run(){
doing.step1(user); //做完第一步,等待
Thread.spleep(1000);//等待1秒
doing.step2(user);
。
}
}
class DoSomething{
void step1(String user){}
void step2(String user){}
......
}
三个帐号同时登录,相当于:
new Processor(a).start();// a用户登录后启动线程
new Processor(b).start();// b用户登录后启动线程
new Processor(c).start();// c用户登录后启动线程
每个用户线程中做了第一步都等待了一段时间。
synchronize? 同步?Oh , no, not about this.
private String password;
private StringBuffer o;
public Task(String username, String password, StringBuffer o){
this.username = username;
this.password = password;
this.o = o;
}
@Override
public void run() {
step1();
while(true){
try {
Thread.sleep(1000);
step2();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
private void step1(){
}
private void step2(){
synchronized(o){
System.out.println(Thread.currentThread() + " "+o.reverse().toString());
}
}
}
有的话 wait觉得这句话对!