草庐IT

needs_thread_safety

全部标签

android - AsyncTask 和 Thread/Runnable 的区别

我有一个令我困惑的问题。假设我想在另一个线程中执行某些操作,例如获取GPS/位置信息,正如SDK文档中所建议的那样,必须使用后台线程。所以问题来了:通过AsyncTaskAND在后台创建一个Thread创建Threadthread1=newThread(newRunnable()...并实现run()? 最佳答案 AsyncTask是一个便利类,用于在新线程上做一些工作,并在完成时使用调用它的线程(通常是UI线程)上的结果。它只是一个包装器,它使用了几个可运行对象,但处理了创建线程和处理线程之间的消息传递的所有复杂性。AsyncTa

android - java.lang.RuntimeException : Can't create handler inside thread that has not called Looper. 准备();

这个问题在这里已经有了答案:Can'tcreatehandlerinsidethreadthathasnotcalledLooper.prepare()(30个回答)关闭2年前。我有一个运行线程的Android应用。我希望Toast消息与消息一起显示。当我这样做时,我得到以下异常:Logcat跟踪:FATALEXCEPTION:Timer-0java.lang.RuntimeException:Can'tcreatehandlerinsidethreadthathasnotcalledLooper.prepare()atandroid.os.Handler.(Handler.java:

android - ActionBarCompat : java. lang.IllegalStateException : You need to use a Theme. AppCompat

我在Android2.3.5上遇到RuntimeException,但我是使用Theme.AppCompat(res/values/themes.xml)。这是电话:http://www.gsmarena.com/samsung_galaxy_y_s5360-4117.php@style/QueryActionBar@style/QueryActionBar@color/blueback@color/blueback@color/blueback@color/blueback这是values-v11的文件。这是错误。java.lang.RuntimeException:Unableto

Android:什么时候应该使用 Handler(),什么时候应该使用 Thread?

当我需要异步运行某些东西时,例如长时间运行的任务或使用网络的逻辑,或出于任何原因,启动新线程并运行它可以正常工作。创建Handler并运行它也可以。有什么不同?我应该什么时候使用每一个?使用Handler而不是Thread的优点/原因是什么?PS。-为了这个问题,让我们忽略AsyncTask。-Handler().postDelayed用例对我来说很清楚,为了这个问题,让我们假设我需要立即开始任务。 最佳答案 如果你正在做的任何事情都是“重”的,那么你应该在一个线程中做它。如果您没有在自己的线程中明确启动它,那么它将在主(UI)线程

Android 基础知识 : running code in the UI thread

从在UI线程中运行代码的观点来看,两者有什么区别:MainActivity.this.runOnUiThread(newRunnable(){publicvoidrun(){Log.d("UIthread","IamtheUIthread");}});或MainActivity.this.myView.post(newRunnable(){publicvoidrun(){Log.d("UIthread","IamtheUIthread");}});和privateclassBackgroundTaskextendsAsyncTask{protectedvoidonPostExecute

java - MongoDB/Java : Type safety in DBObjects

我在MongoDB文档中有一个字段,该字段存储了一个任意大的数字。当我将它作为DBObject(MongoDB的Java驱动程序)检索时,有时会遇到ClassCastException:DBObjectobj=collection.findOne();longval=(Long)(o.get("numericVal"));如果numericVal中存储的值是1234567890,则转换为Long成功。如果是12345,则DBObject.get()返回一个Double,并且转换失败。在反序列化MongoDBDBObjects时如何确保类型安全? 最佳答案

mongodb - 在尝试升级到 4.0 之前使用 brew upgrade Mongo update from 3.4 to 4.0 error : The data files need to be fully upgraded to version 3. 6

mongod我收到以下错误**重要提示:升级问题:在尝试升级到4.0之前,数据文件需要完全升级到版本3.6;见http://dochub.mongodb.org/core/4.0-upgrade-fcv了解更多详情。但是如果我使用brewservicesstartmongodb然后mongo服务器就可以启动了。修复mongod错误我找到了类似的错误线程ErrorwhileupgradingMongodbfrom3.2to3.6所以我降级到mongodb3.6,然后运行db.adminCommand({setFeatureCompatibilityVersion:"3.6"})然后重新安

c++ - 我想杀死一个 std::thread 使用它的线程对象?

这个问题在这里已经有了答案:关闭9年前.PossibleDuplicate:C++0xthreadinterruption我正在尝试通过使用其线程对象来杀死/停止c++std::thread。我们怎样才能做到这一点? 最佳答案 @bamboon的回答很好,但我觉得这值得更强有力的声明。无论您使用哪种语言,您的程序都会获取和释放资源:内存、文件描述符……对于一次性触发的简单程序,泄漏资源无关紧要:当程序结束时,现代操作系统会自动占用资源返回;但是对于长时间运行的程序,基本要求是不泄露资源,或者至少不重复。因此,您应该从一开始就被教导,

c++ - OpenMP set_num_threads() 不工作

我正在使用C++中的OpenMP编写一个并行程序。我想用omp_set_num_threads()控制程序中的线程数,但是不行。#include#include#include"mpi.h"usingnamespacestd;intmyrank;intgroupsize;doublesum;doublet1,t2;intn=10000000;intmain(intargc,char*argv[]){MPI_Init(&argc,&argv);MPI_Comm_rank(MPI_COMM_WORLD,&myrank);MPI_Comm_size(MPI_COMM_WORLD,&group

c++ - 停止 C++ 11 std::threads 等待 std::condition_variable

我正在尝试了解新C++11标准中的基本多线程机制。我能想到的最基本的例子如下:生产者和消费者在不同的线程中实现生产者将一定数量的项目放入队列中消费者从队列中取出元素(如果有的话)这个例子也在许多关于多线程的教科书中使用,关于通信过程的一切都很好。但是,在停止消费者线程时我遇到了问题。我希望消费者一直运行,直到它得到一个明确的停止信号(在大多数情况下,这意味着我等待生产者完成,以便我可以在程序结束之前停止消费者)。不幸的是,C++11线程缺乏中断机制(例如,我从Java中的多线程中知道)。因此,我必须使用像isRunning这样的标志来表示我希望线程停止。现在的主要问题是:在我停止生产者