Articles of 线程安全

如何在Java中以线程安全的方式使用mkdirs?

在遇到与mkdirs()相关的问题并且在互联网上发现问题后,我得到mkdirs()存在线程安全问题的印象。 有没有一种方法可以确保当多个线程可能正试图创build类似的文件结构时正确创build目录? 谢谢 (在我的情况下,我将在Android上使用这个)

从后台线程完成android活动是否安全?

在Android中,从后台线程调用Activity.finish()是否安全,还是只能从主线程调用? 这个文档没有提到关于这个方法的线程安全性。

获取正在执行的当前方法的名称

那么我基本上做的是一个有很多活动的应用程序。 我有一些与Android手机的朋友,我给他们的testing应用程序。 然而,它有时进入无尽的循环,并做了奇怪的行为,由于缺乏编程经验,无法在这些特定时刻转储logcat,我无法理解。 所以我需要做的是创build一个静态总是可见的窗口,可能是popup式窗口,显示现在程序在哪个方法。 所以我的问题是,这是实现这个function的最好方法,以及如何检索App的当前方法(它有几个线程)。

哪些情况导致SQLiteDiskIOException代码3850

我有一个使用ContentProvider访问SQLite的应用程序。 SQLiteOpenHelper的实例在提供者onCreate中创build: @Override public boolean onCreate() { final Context context = getContext(); mDBHelper = new MyDatabase(context); return true; } 在insert / update / delete / query方法中检索的SQLiteDatabase实例不是手动closures的。 这些方法都没有被标记为同步。 ContentProvider是从UI和服务启动的多个线程访问的。 示例stacktrace: android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 3850) at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method) at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:734) at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754) at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64) at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1574) at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1520) at com.sample.provider.MyProvider.update(SourceFile:0) at android.content.ContentProvider$Transport.update(ContentProvider.java:260) at android.content.ContentResolver.update(ContentResolver.java:1040) 事情工作正常,当我添加一个类,使用从HandlerThread […]

Android – AsyncTask的结果不会返回到主Activity

我正在尝试使用AsyncTask扩展类来处理连接到URL,parsingJSON,在parsing过程中显示不确定的ProgressDialog,并将结果作为HashMap中的键值对返回到主Activity。 HashMap的结果将被主Activity读取并放入表单域。 但是,即使我在我的AsyncTask中填充HashMap(由println语句certificate),调用返回HashMap的主Activity中的方法会得到一个空的结果。 我不知道这是我做错了什么,或者如果我误解了AsyncTask的function。 我正在辩论转换我的类,扩展AsyncTask到一个活动。 从本质上讲,用户在这个数据search/parsing过程中不应该做任何事情,并且应该等到ProgressDialog消失后才能再次与应用程序进行交互(或者点击后退button)。 此外,我的应用程序需要能够处理我的AsyncTask中的exception被捕获(无法连接到URL,错误的JSON,无法find的产品ID进行search)的特定情况下,并定制错误对话框为这些例外。 如果这个类是一个Activity,我可以很容易地做到这一点,因为我可以在调用finish()时返回不同的结果代码,这取决于是否捕获到exception。 再一次,我不确定AsyncTask是否是最好的解决scheme,因为用户在收集和parsing信息时不会做其他任何事情。 请告诉我,如果一个新的活动是有道理的,或者如果我只是绑定我的后台线程的实现。 MainActivity.java mInitiateProductLookupButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { ProductLookup pl = new ProductLookup(id, MainActivity.this); pl.execute(); // The below variable is always empty! HashMap<String, String> productInfo = pl.getProductInfo(); applyProductInfoToFormFields(productInfo); } }); ProductLookup.java public class ProductLookup extends AsyncTask<Object, Void, HashMap<String, String>> { private String mProductID; private […]

Android库中的线程安全

我正在试图为Android系统实现一个本地共享库(.so)。 自然,有一些代码块需要线程安全。 我在这里发现,不支持pthread锁,互斥锁或条件variables。 我想知道在库级别通常使用什么来实现线程安全?

Asynctaskerror handling

我正在使用AsyncTask来执行一些后台计算,但我无法find一个正确的方法来处理exception。 目前我正在使用下面的代码: private class MyTask extends AsyncTask<String, Void, String> { private int e = 0; @Override protected String doInBackground(String… params) { try { URL url = new URL("http://www.example.com/"); } catch (MalformedURLException e) { e = 1; } // Other code here… return null; } @Override protected void onPostExecute(String result) { if (e == 1) Log.i("Some […]

Handler,Runnable和Threads有什么区别?

Handler,Runnable和Threads有什么区别? 当我使用android时,我需要在后台运行一些东西。 我使用线程来运行它。 通常我会编写一个扩展Thread并实现run方法的类。 我也看到了一些可运行的例子,并将其传递到线程中。 不过我还是很困惑。 有人能给我一个明确的解释吗? 如果可以在Thread的run方法中写入后台代码,Runnable的意义何在? 线程中如何使用Handler,为什么我们需要使用它。 Android有另外一个叫runOnUiThread的东西,我们怎么用呢? 我知道它用于更新用户界面。

Android线程和数据库locking

我们使用AsyncTasks来访问数据库表和游标。 不幸的是,我们偶尔会看到数据库被locking的例外。 E/SQLiteOpenHelper(15963): Couldn't open iviewnews.db for writing (will try read-only): E/SQLiteOpenHelper(15963): android.database.sqlite.SQLiteException: database is locked E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteDatabase.native_setLocale(Native Method) E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteDatabase.setLocale(SQLiteDatabase.java:1637) E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1587) E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:638) E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:659) E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:652) E/SQLiteOpenHelper(15963): at android.app.ApplicationContext.openOrCreateDatabase(ApplicationContext.java:482) E/SQLiteOpenHelper(15963): at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:193) E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:98) E/SQLiteOpenHelper(15963): at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:158) E/SQLiteOpenHelper(15963): at com.iview.android.widget.IViewNewsTopStoryWidget.initData(IViewNewsTopStoryWidget.java:73) E/SQLiteOpenHelper(15963): at com.iview.android.widget.IViewNewsTopStoryWidget.updateNewsWidgets(IViewNewsTopStoryWidget.java:121) E/SQLiteOpenHelper(15963): at […]

Sqlite数据库实例是线程安全的

我有一个表的数据库。 我想要使​​用多个线程更新表。 我将在所有线程中使用相同的SQLiteDatabase实例。 请build议,如果这种方法是正确的。 Sqlite数据库线程安全吗? 两个不同的线程可以同时更新不同的一组值。