首页 > 解决方案 > 是从线程线程安全调用 context.getApplicationContext 吗?

问题描述

我编写了以下代码来从数据库中读取一段数据,但我不确定代码是否是线程安全的,因为它是c.getApplicationContext从不是 UI 线程的线程调用的。

 public class chat extends AppCompatActivity
{
  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_chat);
        final Context myContext = this;
        AgentAsyncTask zx = new AgentAsyncTask(myContext);
        zx.execute();

        }

 private static class AgentAsyncTask extends AsyncTask<Void, Void, List<Message>> {

        private Context c;
        public AgentAsyncTask(Context c) {
         this.c = c;

        }

        @Override
        protected List<Message> doInBackground(Void... params) {
            List<Message> x = AppDatabase.getAppDatabase(c.getApplicationContext()).userDao().getAll();
            return x;
        }

        @Override
        protected void onPostExecute(List<Message> agentsCount) {
            Toast.makeText(c, agentsCount.get(0).message, Toast.LENGTH_SHORT).show();
        }
    }
}

这个代码线程安全吗?我怀疑不是线程安全的行是:

List<Message> x = AppDatabase.getAppDatabase(c.getApplicationContext()).userDao().getAll();

标签: javaandroidmultithreadingthread-safety

解决方案


推荐阅读