首页 \ 问答 \ java并发编程核心方法与框架 怎么样

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多线程的问题,向你请教,题目如下:编写一个多线程程序实现如下第一次调用st()方法后,available应该保持不变,这样才能保证线程b也打印.v
  • 不懂……如果你是用线程同时去添加多个用户,第一,人不是多线程的,你只能一个个去添加;第二,如果你想添加用户的时候还没有添加完成又做别的事情,完成可能用面向对象思想,程序一块块执行的,对于编人员来说不用考虑到多线程,程序本身已经完成了,比如我点击了添加用户的按钮,你的程序还可以往下跑,因为你仅仅是new了一个添加用户的窗口,主程序可以继续向下执行,除非你玩模态对话;第三,如果你非要多线程添加用户,就用简单的线程例子能解决啊,public void run(){}方法里写上添加用户的代码就行啦,主程序运行时ne ...
  • 用同步就行了
  • JAVA多线程编程[2022-03-08]

    多线程程序中,如您说的四线程,2个对一个变量加1,2个对一个变量减1,如果这个变量声明的时候加了synchronized关键字,那么这个变量同时只能有一个线程访问,其他的线程会排队,如果没加,那么可能出现同时操作一个变量的情况,举例来说,1个加的线程和一个减的线程同时对一个值为3的变量进行操作,可能的结果是4或2.
  • 并发需要用多线程实现。 web开发一般是不用多线程,不过个别特殊的功能可能要用。
  • 并发需要用 多线程实现。 web开发一般是不用多线程,不过个别特殊的功能可能要用。

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。