-
多线程互相唤醒20
4个线程,1执行结束唤醒2,然后1进入睡眠...4结束唤醒1 如此循环。要求每个线程中的run方法中的代码只执行完整的一次。1分钟循环这4个线程一次。该怎么办2008年7月31日 17:24
2个答案 按时间排序 按投票排序
-
创建四个线程,2,3,4线程开始就wait。1运行结束就notify 线程2。
每次运行的时候判断前一次运行时间和这次运行时间的时间差。
import java.util.Date; /** * @author jolestar * */ public class ThreadTest { /** * */ public ThreadTest() { } private static class TestThread extends Thread { private Thread next; //前一次运行时间 private long preRuntime =0; public TestThread(String name, Thread next) { super(name); this.next = next; } public void setNext(Thread next){ this.next = next; } @Override public void run() { synchronized (this) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } while (true) { //前一次运行是否经过了1分钟 if((System.currentTimeMillis()-this.preRuntime)<60*1000){ long time = 60*1000-(System.currentTimeMillis()-this.preRuntime); System.out.println("need to sleep:"+time); try { this.sleep(time); } catch (InterruptedException e) { e.printStackTrace(); } } dosomething(); synchronized (this.next) { this.next.notify(); } synchronized (this) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } } public void dosomething() { Date date = new Date(); preRuntime = date.getTime(); System.out.println(this.getName() + " do some thing."+date.toString()); } } /** * @param args */ public static void main(String[] args) { TestThread t1 = new TestThread("1",null); TestThread t2 = new TestThread("2",null); t1.setNext(t2); TestThread t3 = new TestThread("3",null); t2.setNext(t3); TestThread t4 = new TestThread("4",t1); t3.setNext(t4); t1.start(); t2.start(); t3.start(); t4.start(); System.out.println("notify t1"); synchronized (t1) { t1.notify(); } } }
2008年8月05日 17:45
相关推荐
在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。
例如,死锁发生在两个或更多线程互相等待对方释放资源,导致它们都无法继续的情况。避免死锁的方法包括避免循环等待、设置超时和使用死锁检测算法等。 总之,Java的多线程并发实例可以帮助我们更好地理解和实践线程...
**CC++多线程编程**是现代软件开发中的重要组成部分,尤其在高性能计算、服务器端应用和实时系统中,多线程技术能充分利用多核处理器的资源,提高程序的执行效率。以下是一些关于CC++多线程编程的核心知识点: 1. *...
- 死锁是多线程编程中常见的问题,多个线程互相等待对方释放资源导致无法继续执行。理解和避免死锁是多线程编程的必备技能。 以上知识点是C#.NET多线程实例中可能会涉及到的核心内容,通过学习这些实例,开发者...
9. **死锁和活锁**:在多线程编程中,死锁是指两个或多个线程互相等待对方释放资源而造成的一种僵局。活锁则是线程不断尝试但无法取得进展的情况。理解并避免这些情况对于编写健壮的多线程程序至关重要。 10. **...
当两个或更多线程互相等待对方释放资源时,就会发生死锁。避免死锁的关键是遵循一些原则,如避免循环等待,使用超时和死锁预防算法等。 8. **线程安全**: 如果一个函数在多线程环境下正确工作,我们就说它是线程...
死锁是多线程编程中常见的问题,当两个或更多线程互相等待对方释放资源而无法继续执行时,就会发生死锁。Java提供了一些工具来避免和检测死锁,例如java.util.concurrent包下的Lock接口和Condition接口,它们提供了...
多线程编程中可能出现死锁和活锁问题,死锁是两个或更多线程互相等待对方释放资源导致的僵局,活锁则是线程不断重试导致无法继续执行。识别和避免这些问题是多线程编程的关键挑战。 以上知识点在提供的源代码中都有...
死锁是多线程中的一种危险情况,当两个或更多线程互相等待对方释放资源时发生。例如,哲学家进餐问题就是一个经典的死锁示例。为了避免死锁,开发者需要谨慎设计资源的获取和释放顺序,或者使用更高级的并发工具,如...
8. **死锁(Deadlock)**:当两个或更多线程互相等待对方释放资源而无法继续执行时,就形成了死锁。避免和检测死锁是多线程编程中的重要课题。 9. **活锁(Livelock)**:与死锁类似,但线程不是完全停止,而是不断...
6. 死锁:当两个或更多线程互相等待对方释放资源而无法继续执行时,就会发生死锁。避免死锁的关键在于避免循环等待条件。 7. 线程中断:Java提供了interrupt()和isInterrupted()方法来中断和检测线程。但需要注意的...
11. **死锁与活锁**:死锁是两个或更多线程互相等待对方释放资源,造成无法继续的情况;活锁则是线程不断重试导致无法前进。避免这些情况需要合理设计线程同步策略。 12. **线程异常处理**:主线程不会捕获子线程的...
- 当两个或更多线程互相等待对方释放资源而形成的一种僵局,需要通过避免循环等待或使用死锁检测算法来预防。 9. **线程安全的数据结构** - Java并发包`java.util.concurrent`提供了线程安全的集合类,如`...
死锁是当两个或更多线程互相等待对方释放资源而造成的僵局。合理的资源分配和锁的使用策略可以预防死锁。 7. **线程优先级**:某些编程语言允许设置线程的优先级,但在这个场景中可能并不适用,因为红绿灯的切换...
当两个或更多线程互相等待对方释放资源而形成的一种僵局,称为死锁。避免死锁的关键是避免循环等待,可以使用银行家算法或Java的java.util.concurrent.locks包中的高级锁来预防。 七、线程安全的数据结构 Java集合...
3. **并发处理**:当有多个用户同时发送消息时,多线程可以保证每个消息的处理不会互相干扰,提高系统的并行处理能力。 4. **资源管理**:通过合理分配线程,我们可以优化CPU和内存的使用,防止单一线程过度消耗...
在C++编程中,多线程技术是一种关键的并发处理机制,它允许程序同时执行多个独立的任务,从而提高系统的效率和响应性。本综合技术篇将深入探讨C++中的多线程概念、实现方法以及常见问题。 一、线程基础 线程是操作...
当两个或更多线程互相等待对方释放资源时,会发生死锁。避免死锁的关键是避免循环等待,可以通过资源排序、避免嵌套锁等策略来预防。 5. **线程优先级** Java线程具有优先级,`Thread.NORM_PRIORITY`是默认优先级...
死锁发生在两个或多个线程互相等待对方释放资源,导致它们都无法继续执行。活锁则是线程不断地重试,但没有进展,就像两个人在狭小的空间里试图通过,但都让对方先走。为了避免这些情况,我们需要合理设计资源的获取...
1. **死锁**:两个或更多线程互相等待对方释放资源,形成无法继续执行的状态。避免死锁的关键是正确设计资源获取顺序和避免循环等待。 2. **活锁**:线程不断尝试获取资源但一直失败,导致线程无限期地循环,无法...