多线程如何等待

问题描述

主线程中有N个线程,N个线程共同执行同一个过程(过程1)现在的问题是N个线程中如果有一个需要去调用另外一个过程(过程2),这时需要其它线程暂停,待(过程2)结束,所有线程继续(过程2)的执行顺序是不能被打断的我用lock和信号量都发现(过程2)仍然会被分割执行!希望大侠能给支个招

解决方案

解决方案二:
用Join不行吗?
解决方案三:
可能是你lock(this)的问题声明全局变量objectlockObj=newObject();lock(this.lockObj){过程2执行}
解决方案四:
信号量不行?
解决方案五:
lock也不行,(过程2)仍然被分割执行了引用2楼slyzly的回复:

可能是你lock(this)的问题声明全局变量objectlockObj=newObject();lock(this.lockObj){过程2执行}

解决方案六:
很简单的代码,都不能同步,过程2相当于dootherprivatestaticvoiddomain(){sm=newSemaphore(threadnum,threadnum);arrthread=newThread[threadnum];alldone=newManualResetEvent[threadnum];threaddone=newManualResetEvent[threadnum];while(true){for(inti=0;i<threadnum;i++){sm.WaitOne();alldone[i]=newManualResetEvent(false);threaddone[i]=newManualResetEvent(false);arrthread[i]=newThread(dowork);arrthread[i].Name=i.ToString();arrthread[i].Start();//threaddone[i].WaitOne();}}}privatestaticvoiddowork(){intsi=0;lock(ball){si=Convert.ToInt16(Thread.CurrentThread.Name);}Console.WriteLine("<"+Thread.CurrentThread.Name+"running-1>");if(DateTime.Now.Second%20==0){lock(ball){doother();alldone[si].WaitOne();}}for(inti=1;i<10;i++){Console.WriteLine("<"+Thread.CurrentThread.Name+"running-"+i.ToString()+">");Thread.Sleep(100);}Console.WriteLine("<"+Thread.CurrentThread.Name+"done>");//threaddone[si].Set();sm.Release();}publicstaticvoiddoother(){lock(ball){Console.WriteLine("["+Thread.CurrentThread.Name+"otherrunning-1]");}Thread.Sleep(3000);lock(ball){Console.WriteLine("["+Thread.CurrentThread.Name+"otherrunning-2]");}lock(ball){Console.WriteLine("["+Thread.CurrentThread.Name+"otherrunningdone]");}intsi=Convert.ToInt16(Thread.CurrentThread.Name);alldone[si].Set();}

时间: 2024-08-23 12:30:22

多线程如何等待的相关文章

多线程-不用等待唤醒机制下的多生产多消费有什么缺陷

问题描述 不用等待唤醒机制下的多生产多消费有什么缺陷 class Resouce{ private int count=1; private String name; boolean flag=true; Resouce(String name) { this.name=name; } synchronized void set() { if(!flag) { System.out.println(Thread.currentThread().getName()+""------生产-

java多线程的等待唤醒机制及如何解决同步过程中的安全问题

/* class Person{ String name; String sex; boolean flag = true; public void setPerson(String name, String sex){ this.sex=sex; this.name=name; } } class Input implements Runnable{ int x=0; Person p; Input(Person p){ this.p=p; } public void run(){ while

【python】多线程编程中join函数的用法

在学习python 多线程编程的时候,一定会使用一个函数join,本章内容通过例子讲述join 在多线程编程中有哪些作用.本文使用两段代码演示其功能代码一 import threading, timedef now() :    return str( time.strftime( '%Y-%m-%d %H:%M:%S' , time.localtime() ) )def func1():    print 'start func1: ' + now() + "\n"    time.

异步调用Web服务方法

基于Ajax技术构建的门户是web 2.0这一代中最为成功的Web应用程序.而这块市场上iGoogle和Pageflakes这两大站点已经走在了时代的前列. 当你打开Pageflakes,将会看到如下的界面: 接下来就是界面上的各个"部件"去向服务器请求各种web服务,而服务器作为代理,则代为向外部web服务发出请求.(这是因为ajax调用无法跨越,所以常通过代理来请求数据) 问题场景:某个很受用户欢迎的"部件"很长时间不能执行,导致很对请求无法及时执行,引起请求失

Java线程面试题 Top 50

不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员 的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关的问题在面试中经常会 被提到. 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像

Java线程面试题 Top 50(转)

  不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关的问题在面试中经常会被提到. 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像

Java线程试题Top50

不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程相关的问题在面试中经常会被提到. 在典型的Java面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程, 如何创建线程,用什么方式创建线程比较好(比如:继承thread类还是调用Runnable接口),然后逐渐问到并发问题像在J

http-为什么要使用setConnectionTimeout和SetReadTimeout?

问题描述 为什么要使用setConnectionTimeout和SetReadTimeout? 为什么要给URLConnection对象使用setConnectionTimeout和SetReadTimeout? 比如setConnectionTimeout会在读取超过设置的时间的情况下报错,我不设置又有啥关系?会出线啥问题呢?使用这两个方法主要是为什么考虑呢? 解决方案 太长的时间当无法连接的时候会导致程序挂起等待很久,影响用户体验.太短的超时在网速较低但是服务器工作正常的情况下造成无法访问.

50 道Java 线程面试题(经典)_java

下面是 Java 线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速.比如,如果一个线程完成一个任务要 100 毫秒,那么用十个线程完成改任务只需 10 毫秒.Java 在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点.欲了解更多详细信息请点击这里. 2) 线程和进程有什么区别? 线程是进程的子集,一个进程可以有很