gpt4 book ai didi

Android 上的 Java 并发

转载 作者:太空狗 更新时间:2023-10-29 15:07:45 26 4
gpt4 key购买 nike

我正在尝试制作一个演示并发问题的 Android 应用程序示例,但令我感到奇怪的是,我的代码显示了正确的结果,而不是竞争条件导致的错误结果。以下是我的代码,我读过 think in Java(大约 1150 页)

    import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;

public class MainActivity extends Activity {
private breadBaker bB;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("shanwu","Thread Test Starts!");
bB = new breadBaker();
bB.makeBread();
breadBuyer TA = new breadBuyer();
try{
Thread a =new Thread(TA);
Thread b =new Thread(TA);
Thread c =new Thread(TA);
Thread d =new Thread(TA);
Thread e =new Thread(TA);
Thread f =new Thread(TA);
Thread g =new Thread(TA);
Thread h =new Thread(TA);
Thread i =new Thread(TA);
Thread j =new Thread(TA);
a.start();
b.start();
c.start();
d.start();
e.start();
f.start();
g.start();
h.start();
i.start();
j.start();
bB.makeBread();
}catch(Exception e){
e.printStackTrace();
}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

class breadBaker{
private int breadCount;
public breadBaker(){
breadCount = 3;
}
public void makeBread(){
breadCount++;
Log.d("shanwu","make one bread, current bread count: "+breadCount);
}
public void giveBread(){
breadCount--;
Log.d("shanwu","sold one bread, current bread count: "+breadCount);
}
public int getBreadCount()
{
return breadCount;
}
}

class breadBuyer implements Runnable{
public void buyBread(){
bB.giveBread();
}
public void waitInLine(){
          // Thread.Sleep(100);
}
@Override
public void run() {
// TODO Auto-generated method stub
if(bB.getBreadCount() > 0){
buyBread();
}
else
{
waitInLine();
}
}
}
}

我基本上是从 Think in Java 的内容中学习,并尝试让它在 Android 上运行...请指出似乎是什么问题,我认为 breadCount 会由于竞争条件而变为负值,但事实并非如此, 它工作正常......

最佳答案

又看了一遍Concurrency从头开始的书,说demo代码很难出错,但是还是要注意concurrency问题,不然后面会出事的。

关于Android 上的 Java 并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20230316/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com