当前位置: 代码迷 >> 多核软件开发 >> 求教线程同步有关问题
  详细解决方案

求教线程同步有关问题

热度:8301   发布时间:2013-02-26 00:00:00.0
求教线程同步问题? - Java / Java SE
要给客户的一个jar包提供这样的功能:


可以调用一个静态方法

这个时候我就会弹出一些对话框(这个对话框是一个线程,这个线程可能会生成另外的线程)这个是系统实现的我不能控制他。

等待对话框的所有事情做完

然后返回等待对话框返回了
再返回值

示例代码如下:
Java code
boolean static do(oneObj a){  Obj a = new Obj(a)//此类的构造方法会产生一个对话框,这个对话框是宁外一个线程  return a.某属性}


我得怎么做才能让return这句 等他前面那句里面的另外线程 执行完了才可以返回 
本来是j2me但是j2me人气好低啊!


跑这里来发帖吧!拜求答案


最好能给哥示例代码



------解决方案--------------------------------------------------------
join()方法。
------解决方案--------------------------------------------------------
探讨
引用:

join()方法就行。
join 不是也得在 thread里面的吗?


那怎么才能阻塞 这个静态方法的返回了?

------解决方案--------------------------------------------------------
用信号量啊 线程的同步互斥都得用信号量来控件的嘛~ 这个类似于一个bool的开关 感觉用这个好控制些 如果数据处理结束就是true 不然就false true的时候让他出ui false的时候阻塞~
------解决方案--------------------------------------------------------
伪代码实现如下:
Java code
Object get() throws Throwable{Object obj = new Object();//将你创建UI的步骤放到一个线程里面去,这里的obj不能为基本数据类型CreateUIThread t = new CreateUITHread(obj)t.start();t.join();print(obj);return obj;}class CreateUIThread() extends Thread{UICompoenent ui = null;Object obj = null;public CreateUIThread(Object obj){//这个是你需要返回的obj;this.obj = obj;}public void run(){//创建UI,并且等待用户的响应,UI里面都有自己处理事件响应的机制,//比如输入后确定,这里将OBJ作为参数传递进去,并且对其进行处理,也可以在UI里面创建新的obj//按LZ说法这里的创建过程是另外一个线程.ui = <Create UI>(obj);//强制等待用户输入,UI窗口都会有个句柄,表示这个窗口存在或有效的//比如点击确定或取消这个窗口都会消失while(ui.exist){//避免撑爆CPU<catch exception>Thread.sleep(500);}}}
------解决方案--------------------------------------------------------
Mian方法 调用 你的静态方法 mainFunction
Java code

public class Main{

public static String mainFunction()
{
Object c = new Object();

UI ui = new UI(c);//加载UI的线程
ui.start();
synchronized(c){
try {
c.wait();//等待
} catch (InterruptedException e) {
e.printStackTrace();

}
}
System.out.println("静态方法完成");
return "OK";
}

public static void main(String[] args) {
Main.mainFunction();
}
}




//UI加载的线程
Java code

public class UI extends Thread {

private Object obj;
public UI(Object obj){
this.obj = obj;
}
public void run()
{
System.out.println("加载UI..");
try {
sleep(1000);//模拟加载UI花的时间
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" UI.加载完成.");
synchronized (obj){
obj.notify();
}

}
}





PS----我也不熟练,可能有其他问题。但就这个效果而言 还是能满足需求的。十一文 多给点分分吧。。技术区 还木1000分。不好给你转分 o(╯□╰)o
  相关解决方案