小编use*_*166的帖子

做同步java方法队列调用?

我已经阅读了有关同步方法的oracle doc以及它们如何为多线程程序引入锁定,但有一件事我不清楚.对已经锁定的方法的后续调用是否排队?

让我们说我们有一个班级:

class Astore {
    ...
    public synchronized void a() {
        doSomethingTimeConsuming();
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

和3个调用astore.a()的线程

final Astore astore = new Astore();

Thread t1 = new Thread(new Runnable() {
    public void run() { 
        astore.a();
        doSomethingElse();
        astore.a();
    }
});
t1.start();

Thread t2 = new Thread(new Runnable() {
    public void run() {
        astore.a();
    }
});
t2.start();

Thread t3 = new Thread(new Runnable() {
    public void run() {
        astore.a();
    }
});
t3.start();
Run Code Online (Sandbox Code Playgroud)

我不确定我是否正确地做了这个例子,但重点是,3个线程几乎同时使用synchronized方法调用同一个对象.

将操作顺序存储在队列中,以便线程调用将是:

  1. t1(因为它被称为第一)
  2. t2(在T1之后调用)
  3. T3
  4. 再次t1(当其他线程请求方法时,它正忙着用A做某事)

我可以安全地假设这将是行为,或者不能保证这将是顺序(或者更糟糕的是,t2和t3可能以随机顺序被调用)

当多个线程可能需要共享数据时的最佳实践是什么(例如,每个活动连接有一个线程的套接字服务器 - …

java multithreading synchronized

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

谷歌Android教程 - 不编译

我按照本教程中的说明 完成了所有操作: 谷歌android基础教程,尽管一切都按照描述完成,但代码拒绝编译3个错误.看起来像是在写这些东西的人忘了提到这些东西是什么以及我在哪里/如何定义它们.

我得到的错误:

Error:(24, 68) error: cannot find symbol variable container
Error:(36, 23) error: cannot find symbol variable action_settings
Error:(46, 54) error: cannot find symbol variable fragment_display_message
Run Code Online (Sandbox Code Playgroud)

3个字段都没有在任何地方定义(也许其中一个库是错误的?)有问题的文件是:

package com.example.asteroth.first;

import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.*;
import android.widget.TextView;
import android.R;

public class DisplayMessageActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);
        TextView textView = new TextView(this);
        textView.setTextSize(40);
        textView.setText(message);
        setContentView(textView);
//        setContentView(R.layout.activity_display_message);
        if …
Run Code Online (Sandbox Code Playgroud)

android android-studio

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