java并发编程核心方法与框架 怎么样
更新时间:2022-08-12 22:08
最满意答案
我有个java多线程的问题,向你请教,题目如下:编写一个多线程程序实现如下第一次调用st()方法后,available应该保持不变,这样才能保证线程b也打印.v
其他回答
楼主出现问题有2点: 1. wake() 这个方法也要同步啊,加关键字synchronized ; 2. 第一次调用st()方法后,available应该保持不变,这样才能保证线程b也打印..start,所以加个if判断一下就ok啦。 public class abc { boolean available=false; string name; int count=0; public abc(string name){ this.name=name; } public synchronized void st(){ system.out.println("... start."); count++; if(count>1){ available=true; } try{ wait(); }catch(exception e){} system.out.println("... end."); } public synchronized void end(){ system.out.println("... end."); } public synchronized void wake() { notifyall(); } public static void main(string[] args) { // todo auto-generated method stub abc x=new abc("haha"); testthread a=new testthread(x); testthread b=new testthread(x); c c=new c(x); (new thread(a)).start(); (new thread(b)).start(); (new thread(c)).start(); } } class testthread implements runnable{ abc abc; public testthread(abc abc){ this.abc=abc; } public void run(){ if(!abc.available){ abc.st(); } else abc.end(); } } class c implements runnable{ abc abc; public c(abc abc){ this.abc=abc; } public void run(){ try{ thread.sleep(1000); // system.out.println("sjlfsj jfsdl j"); //验证是否执行到这里 }catch(interruptedexception e){}; abc.wake(); } }
相关问答
更多-
java多线程编程小题[2023-11-15]
我有个java多线程的问题,向你请教,题目如下:编写一个多线程程序实现如下第一次调用st()方法后,available应该保持不变,这样才能保证线程b也打印.v -
求java并发编程的实例 java多线程编程例子[2023-10-02]
不懂……如果你是用线程同时去添加多个用户,第一,人不是多线程的,你只能一个个去添加;第二,如果你想添加用户的时候还没有添加完成又做别的事情,完成可能用面向对象思想,程序一块块执行的,对于编人员来说不用考虑到多线程,程序本身已经完成了,比如我点击了添加用户的按钮,你的程序还可以往下跑,因为你仅仅是new了一个添加用户的窗口,主程序可以继续向下执行,除非你玩模态对话;第三,如果你非要多线程添加用户,就用简单的线程例子能解决啊,public void run(){}方法里写上添加用户的代码就行啦,主程序运行时ne ... -
JAVA多线程编程问题[2022-02-05]
用同步就行了 -
JAVA多线程编程[2022-03-08]
多线程程序中,如您说的四线程,2个对一个变量加1,2个对一个变量减1,如果这个变量声明的时候加了synchronized关键字,那么这个变量同时只能有一个线程访问,其他的线程会排队,如果没加,那么可能出现同时操作一个变量的情况,举例来说,1个加的线程和一个减的线程同时对一个值为3的变量进行操作,可能的结果是4或2. -
java并发编程和多线程编程有什么联系[2022-04-30]
并发需要用多线程实现。 web开发一般是不用多线程,不过个别特殊的功能可能要用。 -
java并发编程和多线程编程有什么联系[2022-05-05]
并发需要用 多线程实现。 web开发一般是不用多线程,不过个别特殊的功能可能要用。