`
ThinkInMyLife
  • 浏览: 48785 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

多线程的一个bug

 
阅读更多

近期,写了一段多线程的代码,主要想用多线程来解析一堆文件,这样比单线程要快;但是我还需要跟踪最后的结果,就是我主线程要hold住,直到各子线程都完毕了,再继续走;

如下:

CountDownLatch countDownLatchGroup = new CountDownLatch(sizeGroup);
		
		
for(int i=0;i<sizeGroup;i++){
	ItemDumpThread thread = new ItemDumpThread(fineName,fileCount);
	thread.start();
}


try {
	countDownLatchGroup.await();
} catch (InterruptedException e) {
	logger.error(e);
	return false;
}

 ok,没问题;

但是有一次,我不小心删除这段代码:

AtomicInteger fileCount;
String fileName;
public ItemDumpThread(

		AtomicInteger fileCount,
		String fileName,

		){
	this.fileName=fileName;
	//this.fileCount=fileCount;删除了
}

public void run() {
	logger.warn(destFile+"=>"+fileCount.incrementAndGet());//NPE...错误
}

 这个错误,然后我主线程还继续等待,好像死锁一样。哎~~~

 

看来这种写法还是很危险~~~

 

分享到:
评论

相关推荐

    易语言多线程的BUG支持库

    ### 易语言多线程BUG支持库解析 #### 标题与描述理解 标题与描述均为“易语言多线程的BUG支持库”,这表明该文档主要关注的是易语言(一种面向中国用户的编程语言)在多线程环境下的错误处理和支持。易语言是一种...

    深入浅出 Java 多线程.pdf

    Java 多线程编程是 Java 编程语言中一个非常重要的概念,它允许程序同时执行多个任务,以提高程序的执行效率和响应速度。在本文中,我们将深入浅出Java多线程编程的世界,探索多线程编程的基本概念、多线程编程的...

    C#多线程学习(一)

    C#多线程学习(一) 本篇文章将深入探讨C#中的多线程机制,涵盖...本篇文章只是C#多线程学习系列的第一篇,接下来将继续探讨C#中的多线程机制,包括如何操纵一个线程、生产者和消费者、多线程的自动管理(线程池)等。

    一个多线程文件搜索的例子

    这里我们探讨的是一个利用多线程技术进行文件搜索的应用实例,名为"SearchDemo"。 首先,我们要理解多线程的概念。在单线程环境中,程序执行是顺序的,一次只能处理一个任务。而多线程则允许多个任务并发执行,这...

    多线程同时操作全局变量的出错演示

    在多线程环境中,如果一个全局变量被多个线程同时读写,由于处理器调度的不确定性,可能导致数据不一致性和错误的结果。这种现象通常称为竞态条件,是多线程编程中的一个常见问题。 多线程是指一个进程中存在两个或...

    多线程写法(精易模块线程池和鱼刺模块线程池)

    在IT行业中,多线程是程序设计中的一个重要概念,特别是在处理并发操作时,如网络服务、数据处理和用户界面更新等。多线程允许程序同时执行多个任务,从而提高资源利用率和程序性能。本篇文章将重点探讨两种线程池...

    多线程操作实例源码,,

     多线程的好处在于可以提高CPU的利用率——任何一个程序员都不希望自己的程序很多时候没事可干,在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。...

    多线程操作实例源码

     多线程的好处在于可以提高CPU的利用率——任何一个程序员都不希望自己的程序很多时候没事可干,在多线程程序中,一个线程必须等待的时候,CPU可以运行其它的线程而不是等待,这样就大大提高了程序的效率。...

    Delphi多线程源码(亲测无bug)

    这个"Delphi多线程源码(亲测无bug)"是一个非常适合初学者了解和学习多线程概念的资源。 首先,我们要理解什么是多线程。在单线程程序中,所有的任务都是按顺序执行的,而多线程则允许程序同时处理多个任务,提高...

    C#多线程全面编程4例

    首先,我们来看"1 多线程",这可能是一个介绍如何创建和启动线程的基础示例。在C#中,我们可以使用`System.Threading.Thread`类来创建新的线程。通过调用`Thread`类的构造函数传入一个委托(如`ThreadStart`或`...

    SOCKET多线程接收文件

    在本场景中,我们讨论的是一个"SOCKET多线程接收文件"的系统设计,它允许多个客户机同时向服务器发送文件。尽管系统存在一些已知的BUG,但能够保证接收到的文件完整无缺,这表明它在并发处理和数据完整性方面具有...

    鱼翅多线程5.4版本模块.rar

    在大数据处理中,可以将数据分片,每片数据在一个独立的线程中处理,加快计算速度;在游戏开发中,多线程可以实现游戏逻辑与渲染的分离,提高游戏流畅度。 使用这个模块,开发者需要注意线程安全问题。多线程环境下...

    Qt5.12.9多线程双缓冲串口类使用

    在本文中,我们将深入探讨如何在Qt5.12.9环境下使用多线程...虽然没有源码,但以上内容应该能为你提供一个使用Qt5.12.9进行多线程双缓冲串口通信的基本框架和理解。在实际项目中,你可以根据具体需求进行调整和优化。

    delphi日志类TLogger 修复多线程显示的bug

    // 解决线程中显示日志时,可能和主线程冲突的问题 if FLogShower &lt;&gt; nil then begin if GetCurrentThreadId = MainThreadID then begin ShowLog(Log, LogLevel); //显示日志到容器 end else begin ...

    多线程&下载——有BUG版(慎下)

    多线程&下载文件。是同时下载多个文件,不是断点续传。 第一次能成功下载。并且可以跳过已成功下载的文件。 但是如果开始后,停止,再次开始时会出错。必须关闭程序重开。 待修正版。慎下。 修正后提供完全版本。

    使用Java编写的一个简易多线程HTTP服务器

    标题中的“使用Java编写的一个简易多线程HTTP服务器”指的是一个使用Java编程语言实现的简单HTTP服务器,它利用了多线程技术来处理客户端的HTTP请求。在Java中,可以使用Socket编程接口来建立TCP连接,进而实现HTTP...

    Posix多线程程序设计(中文版)pdf

    根据提供的文件信息,我们可以详细阐述关于POSIX多线程程序设计的知识点。知识点将围绕POSIX线程库(Pthreads)展开,包括线程的概念、创建和使用、同步机制、高级编程技巧、线程的安全性、以及POSIX标准的演进。 ...

    window下多线程实现矩阵相乘

    Windows 下多线程实现矩阵相乘 在 Windows 平台上,使用多线程实现矩阵相乘可以大大提高计算效率。矩阵相乘是许多科学计算和机器学习算法的基础操作,因此如何高效地实现矩阵相乘是非常重要的。 矩阵相乘的基本...

Global site tag (gtag.js) - Google Analytics