Tag: 睡眠

睡觉并检查,直到情况成立

Java中是否有一个库可以执行以下操作? thread应重复sleep x毫秒,直到条件变为真或达到最大时间。 这种情况主要发生在测试等待某些条件变为真时。 条件受另一个thread影响。 [编辑]为了让它更清楚,我希望测试在失败前只等待X ms。 它不能永远等待条件成为现实。 我正在添加一个人为的例子。 class StateHolder{ boolean active = false; StateHolder(){ new Thread(new Runnable(){ public void run(){ active = true; } }, “State-Changer”).start() } boolean isActive(){ return active; } } class StateHolderTest{ @Test public void shouldTurnActive(){ StateHolder holder = new StateHolder(); assertTrue(holder.isActive); // i want this call not to fail […]

更改操作系统时间时睡眠()中的Java错误:任何解决方法?

惹恼我的错误与此票相同。 基本上,如果您将OS时钟更改为过去的日期,则更改时正在hibernate的所有线程都不会被唤醒。 我正在开发的应用程序意味着24/24运行,我们希望能够在不停止的情况下更改操作系统日期(例如,从夏季时间切换到冬季时间)。 目前发生的事情是,当我们将日期更改为过去时,应用程序的某些部分就会冻结。 我观察到在多台机器上,在Windows XP和Linux 2.6.37上,以及最近的JVM(1.6.0.22)。 我尝试了很多Java睡眠原语,但它们都有相同的行为: 了Thread.sleep(长) Thread.sleep(long,int) 的Object.wait(长) Object.wait(long,int) 的Thread.join(长) Thread.join(long,int) LockSupport.parkNanos(长) java.util.Timer中 javax.swing.Timer中 现在,我不想解决这个问题。 我认为我无法阻止睡眠线冻结。 但至少,我希望在检测到危险的系统时钟变化时警告用户。 我想出了一个监控线程来检测这些变化: Thread t = new Thread(new Runnable() { @Override public void run() { long ms1 = System.currentTimeMillis(); long ms2; while(true) { ms2 = ms1; ms1 = System.currentTimeMillis(); if (ms1 < ms2) { warnUserOfPotentialFreeze(); } Thread.yield(); […]

用手机睡觉检测手势

我正在开发一个SOS安卓应用程序。 如果手机处于睡眠/待机模式,我想检测手势(例如屏幕上的几次触摸),并开始发送帮助请求(例如发送短信)。 我该如何检测这个手势? 有人可以帮助我吗? 谢谢 —解决方案—-我在这里找到了解决方案,这是我的代码: 1)在主要活动中 getApplicationContext().startService(new Intent(this, UpdateService.class)); 2)我创建了一个服务 public class UpdateService extends Service { @Override public void onCreate() { super.onCreate(); // register receiver that handles screen on and screen off logic IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_SCREEN_OFF); BroadcastReceiver mReceiver = new PowerHookReceiver(); registerReceiver(mReceiver, filter); } @Override public void onStart(Intent intent, int startId) […]

如果在synchronized方法中调用,thread.yield()是否会丢失对象的锁定?

我理解Thread.currentThread().yield()是线程调度程序的通知,它可以将cpu周期分配给具有相同优先级的其他线程(如果有的话)。 我的问题是:如果当前线程锁定某个对象并调用yield() ,它会立即丢失该锁定吗? 并且当线程调度程序发现没有这样的线程来分配cpu周期时,那么调用yield()的线程将再次在争取锁定它先前丢失的对象? 我在javadoc和论坛中找不到它[http://www.coderanch.com/t/226223/java-programmer-SCJP/certification/does-sleep-yield-release-lock]有50-50个答案。 我认为yield() (比如说thread1)应该释放锁,因为如果某个相同优先级的线程(比如说thread2)想要对同一个对象进行操作,那么当线程调度程序最终将cup分配给thread2时它就有机会。

如何使用Swing Timer延迟进度条的加载

我需要找到一种方法来使用带有进度条的Swing Timer。 我尝试使用Thread.sleep(),但是当我使用它时它崩溃了应用程序。 有什么方法可以使用Swing Timer而不是Sleep()? public void piiEros(int dist) { Pii pii = new Pii(); pii.setVisible(true); for(int pc = 0;100 > pc; pc++) { try { Thread.sleep(dist/100); } catch (InterruptedException ex) { Logger.getLogger(Trav.class.getName()).log(Level.SEVERE, null, ex); } pii.pg.setValue(pc); } pii.dispose(); o.Eros(); } 注意:Pii是一个带有Progress Bar的课程。 Dist是它加载的速度。 Trav是该方法所在的类.Pc代表%,在条上显示了多少。 o.Eros打开另一个GUI。

中断或停止睡眠线程

如何在java中停止或中断睡眠线程? 我有一个同步数据并在run()方法中hibernate10分钟的线程,如果我想通过在线程hibernate时停止线程来停止同步。 怎么能实现这一目标?