2 china hgb china_hgb 于 2016.02.25 07:55 提问

安卓下载synchronized的问题

为什么加上synchronized下载会导致线程失效?如果不用synchronized的话,那么如何同步多线程?

4个回答

caozhy
caozhy   Ds   Rxr 2016.02.25 08:12
已采纳

你需要同步的是获取列表的过程,避免同时获取同一个下载的任务,而不是下载本身。如果你同步了下载,那么下载过程就不是并发的了。

wen_wxpk
wen_wxpk   2016.02.25 08:35

楼上正解,简单说就是保持只有一个线程能对列表进行修改

luochoudan
luochoudan   Ds   Rxr 2016.02.25 09:29

同步是为了控制多个线程访问同一份资源造成的不安全,卤煮需要考虑一下你的模拟情景。

dcxy0
dcxy0   Ds   Rxr 2016.02.25 09:56

用同步过的集合就可以解决这个问题了

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Android系统开发之四:多线程和Synchronized同步机制
线程:   创建线程的方法:   a:定义Thread类的实例,并start();   b:实现Runnable接口,并作为参数传给Thread类的实例,然后start(); 不管线程是通过什么方式创建的,它都有一个优先级,调度器根据优先级来决定调度执行哪个线程,即让哪个线程使用CPU,调用Thread.setPriority()可以改变线程的优先级。thread.setPriority(
对synchronized的理解
其实如果不懂,自己写一个例子出来跑一跑,就什么都知道了。 synchronized一共两种用法: 1、放在方法前面声明方法 2、synchronized(xxx){ //TODO} 形成代码块 第一种放在方法前面声明方法时,即: public synchronized void func(){ //TODO }假设此方法分别被Thread_1和Thread_2两条线程无
使用synchronized需要注意的一个问题
说到synchronized这个关键字,大伙第一时间想到的,可能就是:当资源共享时,访问(修改)该资源的所有方法都要加上锁(synchronized),才能保证数据不会出错(数据不一致); Java提供了专门的机制去避免了同一个数据对象被多个线程同时访问,这套机制就是 synchronized 关键字,它包括两种用法:synchronized 方法和 synchronized 块。 1.
android开发之synchronized的用法
android开发之synchronized的用法 在android开发中synchronized主要有四种用法。第一是在方法声明时使用;第二是在对某一代码块时使用;第三是对某一对象使用;第四是对某一类使用。具体的实现代码如下:  1.方法声明时使用 放在范围操作符(public等)之后,返回类型声明(void等)之前.这时,线程获得的是成员锁,即一次只能
android synchronized 关键字用法
synchronized是java中表示同步代码快的关键字。可以放在方法修饰符前,比如private synchronized void test(){}, 也可以放在方法内部,修饰某一段特定的代码。可能你贴出完整的代码会清晰一点,synchronized有一个地方需要注意, 就是在给普通方法加锁与给静态方法加锁机制是不一样的。 synchronized在静态方法上表示调用前要获得类的锁,而
Android synchronized用法一
Android synchronized用法 synchronized:Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。      一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该
synchronized:解决死锁的问题[轉貼]
synchronized:解决死锁的问题[轉貼]最近对pv操作研究了一下,才发现原来java已经提供了内置的防死锁功能,不能不说它是很人性的了。下面就是整理的资料: 多线程的互斥与同步   临界资源问题   前面所提到的线程都是独立的,而且异步执行,也就是说每个线程都包含了运行时所需要的数据或方法,而不需要外部的资源或方法,也不必关心其它线程的状态或行为。但是经常有一些
一个多线程synchronized引发的问题思考
/* * 查看程序,到底是输出多少? * */ public class TT implements Runnable { int b=0; public synchronized void m1() { b=1000; try { Thread.sleep(5000); } catch (InterruptedException e) { e.printSta
Java多线程之生产者消费者问题<一>:使用synchronized 关键字解决生产者消费者问题
今天看了一片博文,讲Java多线程之线程的协作,其中作者用程序实例说明了生产者和消费者问题,但我及其他读者发现程序多跑几次还是会出现死锁,百度搜了下大都数的例子也都存在bug,经过仔细研究发现其中的问题,并解决了,感觉有意义贴出来分享下。
synchronized和AtomicInteger解决并发问题的性能比较
转自:http://blog.csdn.net/ufo2910628/article/details/39473059 AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口,底层是有volatile修饰的