草庐IT

Synchronized

全部标签

java - java中两个线程同步访问HashMap

我有两个线程在运行(一个是主线程(比如Thread1),另一个是后台线程(比如Thread2))。我可以从Thread1和Thread2访问HashMap变量hashMap。Thread1修改hashMap,Thread2读取HashMap。在Thread1中,代码将是:synchronized(hashMap){//updatinghashMap}在Thread2中的代码将是:synchronized(hashMap){//readinghashMap}我可以这样使用synchronizedblock来同步对hashMap的访问吗? 最佳答案

android - 为什么在这个 IntentService 示例中使用同步块(synchronized block)?

Android文档对IntentService的描述如下:[IntentService]createsaworkqueuethatpassesoneintentatatimetoyouronHandleIntent()implementation,soyouneverhavetoworryaboutmulti-threading.但是在接下来的例子中,他们在onHandleIntent方法中使用了一个同步块(synchronizedblock),就好像它被期望同时执行一样。protectedvoidonHandleIntent(Intentintent){synchronized(th

java - 同步块(synchronized block) : are variables "inside" other variables updated

很抱歉这个非技术标题,但我认为它很好地总结了我的问题。如果我正确地解释了我读过的内容,同步块(synchronizedblock)(除了其他后果)将使所有变量更新到主内存或从主内存更新(即使是那些在同步块(synchronizedblock)内未明确访问的变量,只有它们的“父”?).例如。引用this的答案stackoverflow问题(我断章取义了,稍后再讲):Thememorybarrierappliestoallmemoryreferences,evenunrelatedones.我需要确认我是否正确解释了这一点。我有2个线程(线程A、线程B)。考虑以下代码:publicclas

【JUC】二十八、synchronized锁升级之偏向锁

文章目录1、偏向锁出现的背景2、从共享对象的内存结构看偏向锁3、偏向锁的持有4、启动偏向锁5、sleep暂停来启动偏向锁6、偏向锁的撤销7、总体流程8、SinceJava15偏向锁的废除1、偏向锁出现的背景如果一个线程连续几次抢到锁,仍然重复加锁解锁,就会导致用户态和内核态频繁切换,这显然是有改进空间的。如之前买票的例子:publicclassSaleTick{publicstaticvoidmain(String[]args){Ticketticket=newTicket();newThread(()->{for(inti=0;i50;i++){ticket.sale();}},"t1").

Android startService() 需要很长时间才能返回到 UI 线程

第一次启动时,我的用例(大致)如下:activity启动一个服务服务获取数据并将其保存在数据库中服务通知有Intent的ActivityActivity显示数据现在我想在服务繁忙时显示一个进度条。问题是:startService(newIntent(getApplicationContext(),UpdateDataService.class));需要很长时间才能“返回”到UI线程。它似乎是一个同步函数(或not?)。如果服务类为空,startService命令几乎是即时处理的。似乎UI线程等待Serice处理它的工作,这根本没有意义。我试图在我的UI线程中显示进度条的同时开始(看起来

java - AsyncTask 中的 Volatile 和 Synchronized

在AsyncTask的内部实现中(在AndroidSDK中)here,sDefaultExecutor使用volatile关键字声明,并且SerialExecutor中的execute()方法使用synchronized声明关键字。现在因为AsyncTask只能从UI线程执行,而且如果我们执行AsyncTask的一个实例,我们不能执行相同的再次实例,除非前一个实例已完成执行。那么这里怎么会出现多线程的情况呢?为什么SerialExecutor有一个ArrayDeque?因为有一段时间我们只能有一个任务。如果我们创建一个新的AsyncTask实例,那么我们不会得到一个新的ArrayDeq

java - 与在 java 中声明同步的方法进行权衡?

每当我试图从线程A中杀死线程B(通常,有时它会起作用)时,我的Android应用程序中都会出现线程锁定问题,原因仍然未知。我猜这是因为我的一些方法在没有同步的情况下跨线程调用。我使取消方法和许多本质上是事件处理程序的方法同步,并使一些共享变量可变,一切正常。我不知道我添加的20个奇怪的volatile/synchronized声明中的哪个实际上解决了这个问题,这让我想“我应该关心吗?它有效,不要乱用它!”所以,我的问题是:是否有与声明方法同步或原始volatile相关的权衡?如果不需要这些声明,是否有任何理由避免这些声明?编辑有问题的线程是正在接收/发送流数据的蓝牙连接,因此ASync

java - 我可以在 Android 的多个线程中使用同一个 RoomDatabase 对象吗?

我在Android上使用Room持久性库。目前,每次访问数据库时我都有一些额外的同步代码。我想知道是否需要此代码。我目前以单例访问数据库。这就是我目前将对象插入数据库的方式://InsertvaluesintoDBfinalAppDatabasedb=AppDatabase.get(this);AsyncTask.execute(newRunnable(){@Overridepublicvoidrun(){synchronized(db){for(WorkOrderwo:workOrderList){db.workOrderDao().insertAll(wo);}}}});我需要在同

android - RecyclerView IndexOutOfBoundsException异常

为什么当我使用循环删除RecyclerView中的某些项目时会执行异常?我在适配器中使用了Collentions.synchronizedMap并且“deleteItem方法”也使用了同步(fragment中的方法)。publicvoidelementController(JsonObjectjsonObject,Stringtype){if(jsonObject==null||type==null){return;}intposition=0,resultPosition=0;if(type.equals("update")||type.equals("delete")){Strin

java.lang.IllegalMonitorStateException : object not locked by thread before wait() 异常

但是我在“花名册”对象被更新的任何地方进行同步。怎么会?违规代码:publicRostergetRoster(){if(roster==null){returnnull;}if(!roster.rosterInitialized){try{synchronized(roster){roster.reload();longwaitTime=SmackConfiguration.getPacketReplyTimeout();longstart=System.currentTimeMillis();while(!roster.rosterInitialized){if(waitTime