相关疑难解决方法(0)

允许方法在Java中锁定其父对象

在Java中有没有办法获得一个方法来锁定(互斥)它所在的对象?

我知道这听起来令人困惑,但基本上我对C#的这个片段并不公平,但在Java中.

lock(this)
{
    // Some code here...
}
Run Code Online (Sandbox Code Playgroud)

我的任务是将用.Net编写的API重新实现到Java中,并且我被要求保持Java版本尽可能与.Net版本类似.事实上,.Net版本看起来像是从我无法访问的C++版本转录而来的.

无论如何,上面的行出现在C#版本中,我需要在Java中做同样的事情.

c# java cross-language code-translation

4
推荐指数
2
解决办法
2611
查看次数

如何使用 AtomicBoolean 实现这一点?

如何确保 initialize() 方法只被调用一次?下面是我想重构以使用 AtomicBoolean 的线程不安全版本。我想要的是 initialize() 只被调用一次

if (!initialized) 
{
   initialize();
   initialized = true;
}
Run Code Online (Sandbox Code Playgroud)

java

3
推荐指数
1
解决办法
2484
查看次数

我需要volatile关键字吗?(JAVA)

我只需要如果将多个线程读取它来标记字段挥发的同时

那么线程A改变字段值的场景怎么样呢?线程B在保证线程A完成之后对它进行评估呢?

在我的场景中,是否存在之前发生的关系(没有volatile关键字)?

java multithreading volatile

3
推荐指数
1
解决办法
480
查看次数

实例变量同步

在下面的示例中,锁定是在实例变量employee上获得的(不在此),但在进入synchronized块时,TestClass1的Threads仍然被锁定.任何建议为什么这种行为.据我所知,如果它同步就应该被锁定.

public class TestClass{
  public static void main(String args[]){
    TestClass1 obj = new TestClass1();
    Thread t1 = new Thread(obj, "T1");
    Thread t2 = new Thread(obj, "T2");
    t1.start();
    t2.start();
  }
}

class TestClass1 implements Runnable{

Employee employee = new Employee();

public void myMethod () {
    synchronized (employee) {
        try {
            Thread.sleep(4000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

public void myOtherMethod() {
    synchronized (employee) {
        try {
            Thread.sleep(4000L);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

@Override
public …
Run Code Online (Sandbox Code Playgroud)

java multithreading thread-synchronization

2
推荐指数
1
解决办法
5580
查看次数

在线程中使用synchronized

以下是什么可以理解?
我在SO上经历过这篇文章,但仍然无法组装它.

代码1:

synchronized(this){ 
// some code
}
Run Code Online (Sandbox Code Playgroud)

码2:

Object lock = new Object();

synchronized(lock){
// some code
}
Run Code Online (Sandbox Code Playgroud)

任何教程,或一些解释同步的链接,就像他们向孩子解释一样?

java synchronized keyword

1
推荐指数
1
解决办法
528
查看次数

使用5个线程添加数字

问题:我必须创建5个线程,每个线程必须执行添加操作.

  • Thread1 - 添加1到10
  • Thread2 - 添加1到50
  • Thread3 - 添加5到15
  • Thread4 - 添加10到20
  • Thread5 - 添加15到20

完成此任务的最佳方法是什么?此外,每次加法操作之间需要1秒的时间延迟.我写了这段代码:我的输出错了,每次都在改变.我知道问题是同步但不能解决.

class adding implements Runnable{
    int a,b; 
    public adding(int a, int b){
        this.a = a;
        this.b = b;
    }
    public void run() {
        add(a,b);
    }
    public void add(int a, int b){
        int sum=0;
        synchronized (this) {
            for(int i=a;i<=b;i++){
                sum = sum+ a;
            }
            System.out.println("Sum of "+a+" to "+ b+" numbers = "+sum);    
        }
    }
}

public class addnumbersusing5threads {
    public static void main(String[] args) …
Run Code Online (Sandbox Code Playgroud)

java multithreading synchronized

1
推荐指数
1
解决办法
1万
查看次数

java中的synchronized(this)更安全吗?

我的一本教科书提到,synchronized()的参数必须是这个...我知道这是错误的.但我听说,由于synchronized(this)更安全,所以应该总是使用它.真的吗 ?谢谢:)

java synchronized

0
推荐指数
1
解决办法
220
查看次数

如何使所有类方法只在单线程上运行?(同步课?)

我知道synchronized关键字make方法一次只能在单个类上运行.但这是问题所在.

我有一个带有方法的数据库类,例如insertAccount,updateSetting等等.如果我制作insertAccount,updateSetting同步,它们中的每一个都只能在一个线程上运行.

如果有一个整个数据库的方法,它会很棒,但没有一个.如果一个线程调用insertAccount而另一个线程调用updateSetting 的同时,它会坏了吧?

因为这些方法中只有一种可以随时运行.那我该怎么办?

有没有办法应用类似synchronized全班的东西?因此,如果第一个线程同时调用insertAccount第二个线程并且第二个线程调用updateSetting,则第二个线程必须等到第一个线程完成访问数据库.

java sqlite multithreading jdbc synchronized

0
推荐指数
1
解决办法
782
查看次数

Java:为什么这有效?

这可能是一个愚蠢的问题,我的Java只是简陋的概率:-(但我不明白为什么这有效(它实际上是Android代码,但我认为这是一般的Java问题).

我不明白该对象mySensorEventListener是如何被实际创建的?

  • 我不明白下面的代码实际上是做什么的.
  • 如何调用此代码???
  • 什么时候叫???

这是我不理解的部分

public SensorListener mySensorEventListener = new SensorListener() {

    @Override
    public void onSensorChanged(int sensor, float[] values) {
        synchronized (this) {
        }
    }
    @Override
    public void onAccuracyChanged(int sensor, int accuracy) {
    }
};
Run Code Online (Sandbox Code Playgroud)

这是它所属的android Activity:

public class RouteMapActivity extends Activity implements IRegisterReceiver {
private SensorManager mSensorManager;
private MapView mapView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mapView = new MapView(this, provider.getTileSource()
            .getTileSizePixels(), resProxy, provider);

    mSensorManager=(SensorManager)getSystemService(Context.SENSOR_SERVICE);
    mSensorManager.registerListener(mySensorEventListener,
            SensorManager.SENSOR_ORIENTATION,
            SensorManager.SENSOR_DELAY_FASTEST);

    setContentView(mapView);
}

public SensorListener mySensorEventListener = new …
Run Code Online (Sandbox Code Playgroud)

java android

-2
推荐指数
1
解决办法
114
查看次数