预处理线程问题解决方案

问题描述:

现有3个线程thread1, thread2, thread3。这3个线程是并发执行的,当着3个线程都执行完成以后,需要执行一个finish()事件。

实现方法:

 1 /** 定义一个静态标记 **/
 2 private static byte nbTemp = 0;
 3
 4 private void aa(){
 5     // 线程1
 6     Thread thread1 = new Thread(new Runnable() {
 7         @Override
 8         public void run() {
 9             // ...
10             bb();
11         }
12     });
13     // 线程2
14     Thread thread2 = new Thread(new Runnable() {
15         @Override
16         public void run() {
17             // ...
18             bb();
19         }
20     });
21     // 线程3
22     Thread thread3 = new Thread(new Runnable() {
23         @Override
24         public void run() {
25             // ...
26             bb();
27         }
28     });
29
30     thread1.start();
31     thread2.start();
32     thread3.start();
33 }
34
35 /** 注意:要添加关键字“synchronized”,否则会先同时操作bb()方法 */
36 private synchronized void bb(){
37     nbTemp ++;
38     if(nbTemp == (byte)3) {
39         finish(); // 条件达成,执行finish();
40     }
41 }
时间: 2024-12-23 11:47:01

预处理线程问题解决方案的相关文章

关于ArrayList线程安全解决方案

一:使用synchronized关键字 二:使用Collections.synchronizedList();使用方法如下: 假如你创建的代码如下:List<Map<String,Object>> data=new ArrayList<Map<String,Object>>(); 那么为了解决这个线程安全问题你可以这么使用Collections.synchronizedList(),如: List<Map<String,Object>>

SimpleDateFormat线程安全问题解决方案

package com.itheima.netty_chat.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class DateUtils { private static final Map<Str

线程间通信和线程互斥

线程间通信 1> 线程间通信分为两种 主线程进入子线程(前面的方法都可以) 子线程回到主线程 2> 返回主线程 3> 代码 这个案例的思路是:当我触摸屏幕时,会在子线程加载图片,然后在主线程刷新UI界面 视图布局我就不写了,大家自己来吧,线程间通信代码如下: #pragma mark - 添加响应方法触发创建子线程并加载数据 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event

servlet线程安全问题

由于默认情况下Servlet,在内存中只有一个实例对象,当多个浏览器并发访问Servlet时就有可能产生线程安全问题 解决方案: 1.加锁--效率降低 synchronized(this){  } 2.SingleThreadModel接口 -- 不能真的防止线程安全问题 在服务器的内部维护一个对象池,放servlet的对象,一个请求过来,会到池里检查一下有没有这个servlet,如果没有,创建一个给当前线程使用,使用完的就放回池里.如果第一个线程使用的servlet对象还没有还回池里,第二线程

iOS---多线程实现方案一 (pthread、NSThread)

在iOS开发中,多线程是我们在开发中经常使用的一门技术.那么本文章将和大家探讨一下针对于多线程的技术实现.本文主要分为如下几个部分: iOS开发中实现多线程的方式 单线程 pthread NSThread 一.iOS开发中实现多线程的方式 pthread: 跨平台,适用于多种操作系统,可移植性强,是一套纯C语言的通用API,且线程的生命周期需要程序员自己管理,使用难度较大,所以在实际开发中通常不使用. NSThread: 基于OC语言的API,使得其简单易用,面向对象操作.线程的声明周期由程序员

使用线程局部存储实现多线程下的日志系统(转)

http://www.ibm.com/developerworks/cn/linux/1310_qianbh_threadlog/index.html 多线程编程向来不容易,在多线程环境下实现日志系统是很多程序员亟须解决的问题.在本文中详细介绍了线程局部存储的概念.原理,并用代码示例详细展示了如何使用线程局部存储来实现多线程下的日志系统. 概述 通常来说,在应用程序中需要日志来记录程序运行的状态,以便后期问题的跟踪定位.在日志系统的设计中,通常会有一个总的日志系统来统一协调这些日志的设置如位置.

Webpack的使用指南-Webpack的常用解决方案

说是解决方案实际上更像是webpack的插件索引. 写这一篇的目的是为了形成一个所以,将来要用时直接来查找即可. 1.自动构建HTML,可压缩空格,可给引用的js加版本号或随机数:html-webpack-plugin 解决方案:使用插件 html-webpack-plugin webpack.config.js如下: module.exports = {entry: './src/app.js', output: { path: __dirname + '/dist', filename: '

DIOCP之DEMO-粘包问题及解决

什么是粘包问题? 举个例子:sever发送20480 个A字母,可是由于client一次只收到10240个A,余下的又发送一次:第一个包中包括有此数据包的总长度,读取出长度,然后接收一个对比长度,如果当前长度<包标定长度,那么就等余下包,一直等到足够包长度,把他们组合在一起就算接收一个数据包. TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾.    出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成.发送方引起的

TCP粘包问题分析和解决(全)

TCP通信粘包问题分析和解决(全) 在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的.因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小.数据量小的数据,合并成一个大的数据块,然后进行封包.这样,接收端,就难于分辨出来了,必须提供科学的拆包机制. 对于UDP,不会使用块的合并优化算法,这样,实际上目前认为,是由于UDP支持的是一对多的模式,