`

多线程操作----找错误

 
阅读更多
找找下面错误

class ListHepler{
	public List<E> list = Collections.synchronizedList(new ArrayList<E>());
	public synchronized boolean putIfAbsent(E x){
		boolean absent = !list.contains(x);
		if(absent)
			list.add(x);
		return absent;
		
	}
}

这里putIfAbsent方法和list使用的不是同一个锁,所以有隐患

class ListHepler{
	public List<E> list = Collections.synchronizedList(new ArrayList<E>());
	public  boolean putIfAbset(E x){
                synchronized (list) {
		      boolean absent = !list.contains(x);
		
			if(absent)
				list.add(x);
		}
		return absent;
	}
}



上面的方法都很傻逼

class ListHepler{
	public List<E> list = new ArrayList<E>();
	public synchronized boolean putIfAbset(E x){
		    boolean absent = !list.contains(x);
			if(absent)
				list.add(x);
		}
		return absent;
	}
}
分享到:
评论

相关推荐

    WHUT-java多线程实验-第三周-文件上传和下载.zip

    3. **错误恢复与重试**:多线程可以用于实现错误处理机制,当某个线程在上传或下载过程中遇到问题时,可以单独处理,不影响其他线程的正常运行,提高系统稳定性。 4. **进度展示**:在多线程环境下,每个线程可以...

    多线程--下载---后台运行

    在Android或Java等平台中,多线程常用于处理耗时操作,如网络请求、数据计算或者复杂的UI更新,避免阻塞主线程,确保用户界面的流畅性。 后台下载则是指在用户不直接交互的情况下,应用程序在后台持续进行数据下载...

    易语言源码多文件多线程传送--.7z

    总的来说,这个压缩包中的源码将涉及易语言的多线程编程、文件操作、网络通信等多个核心知识点,对于想要深入学习易语言以及多线程技术的开发者来说,是一个很好的学习资料。通过对这些源码的学习和研究,开发者可以...

    11-多线程爬虫-1(1).zip

    4. 数据库操作:在多线程环境中,数据库操作需要考虑并发安全。 总结,多线程爬虫通过并发执行任务,有效提高了网络爬虫的效率。在Python中,我们可以利用`threading`模块和`ThreadPoolExecutor`来实现多线程爬虫。...

    linux下的多线程实例--生产者消费者

    ### Linux下的多线程实例——生产者消费者模型 在Linux环境下进行多线程编程时,一个常见的应用场景就是通过生产者消费者模型来管理线程间的通信和数据共享问题。本篇文章将详细解析一个基于Linux环境下的多线程...

    C++面向对象多线程编程-pdf

    同时,C++也引入了多线程功能,让程序员可以充分利用现代多核处理器的性能,实现并行处理。在"C++面向对象多线程编程"这一主题中,我们将深入探讨以下几个关键知识点: 1. 面向对象编程(OOP)基础: - 类与对象:...

    WHUT-java多线程实验-第二周-异常处理.zip

    Java多线程是Java编程中的核心概念,尤其在并发编程领域中扮演着至关重要的角色。在实际开发中,多线程能充分利用系统资源,提高程序的执行效率。本实验主要关注的是Java多线程中的异常处理,这在保证程序稳定性和...

    多线程编程指南--c版

    6. **线程安全**:线程安全是指函数在多线程环境中被调用时,不会产生错误或不确定的行为。线程不安全的函数可能引发数据竞争或死锁,因此编写多线程程序时,要特别注意避免这些问题。 7. **死锁**:当两个或更多...

    【IT十八掌徐培成】Java基础第21天-04.URL-多线程下载-暂停操作.zip

    在实际开发中,除了基本的多线程控制,还可能需要处理其他问题,例如错误重试、断点续传、下载进度显示等。断点续传技术允许在暂停后从上次停止的地方继续下载,这需要在每个线程中保存当前已下载的部分,然后在恢复...

    Linux编程手册-多线程-详细资料.rar

    文档中可能还包含了关于线程安全函数的讲解,这些函数在多线程环境下能够正确工作,不会因并发访问而导致错误。此外,异常处理和线程局部存储也是多线程编程中不容忽视的议题,它们可以帮助我们编写更健壮的代码。 ...

    cocos2d-x视频教程之Socket与多线程编程-源码

    在Cocos2d-x中,你可以使用`cocos2d::Thread`类来进行多线程操作。例如,可以将耗时的计算任务或者网络通信放在单独的线程中执行,以免阻塞主线程,保证游戏画面的流畅更新。多线程的使用需要注意同步问题,以防止...

    QT中sqlite多线程操作4个注意问题

    - **错误处理**: 当多线程操作数据库时,异常处理变得尤为重要。确保捕获并适当地处理`QSqlError`,以便在发生错误时能及时回滚事务或采取其他恢复措施。 - **线程同步**: 虽然SQLite自身不提供线程同步机制,但在...

    vc多线程-mfc-大家可以看看

    在Windows操作系统中,多线程是通过系统内核调度实现的。 在MFC中,多线程的实现主要依赖于`CWinThread`类。`CWinThread`是MFC中的基础线程类,它封装了Windows API的`CreateThread`函数。我们可以通过继承`...

    多线程操作共享文件.zip

    在IT领域,多线程操作共享文件是一项关键的技术,尤其在并发编程中。Delphi作为一款强大的面向对象的 Pascal 编程环境,提供了丰富的工具和类库来支持这样的任务。本压缩包“多线程操作共享文件.zip”显然是一个关于...

    (中英文)-POSIX多线程程序设计-Programming with POSIX Threads

    《Programming with POSIX Threads》是David Butenhof撰写的一本经典教程,主要针对Unix/Linux环境下的多线程程序设计。本书深入浅出地介绍了POSIX线程(也称为pthreads)API,是理解并掌握多线程编程的重要参考资料...

    linux编程技术-多线程-网络编程

    本资料集专注于"Linux编程技术-多线程-网络编程",它涵盖了UNIX环境高级编程、Linux网络编程、Linux多线程编程、Linux窗口编程以及Linux脚本编程等多个核心主题。这些内容都是构建高效、可靠且可扩展的Linux应用的...

    Core Data多线程操作

    本教程将深入探讨如何在多线程环境下进行Core Data的操作,包括创建(Create)、读取(Read)、更新(Update)和删除(Delete)数据。 1. **Core Data多线程基础** - **Main Queue Context**:主线程上下文,通常...

    Oci 多线程操作接口封装demo

    本项目“Oci 多线程操作接口封装demo”展示了如何使用C++来封装Oci接口,并实现多线程环境下的并发数据库操作。下面将详细介绍这个项目中的关键知识点。 1. **Oci接口**: - Oci是Oracle提供的核心API,它允许...

    多线程导入excel 数据

    - 在多线程环境下,要特别关注异常处理,因为线程间的错误可能不易察觉。使用`try-catch-finally`块捕获异常,必要时记录日志,并决定是否需要中断整个任务。 6. **性能优化**: - **批量操作**:为了提高效率,...

Global site tag (gtag.js) - Google Analytics