- 浏览: 1381199 次
- 性别:
- 来自: 江西
文章分类
- 全部博客 (287)
- oracle (30)
- Java (73)
- MySQL (16)
- Myeclipse/eclipse (12)
- javascript (15)
- JSP/Servlet (7)
- maven (14)
- AJAX (2)
- JQuery (9)
- tomcat (8)
- spring (21)
- Linux (28)
- PHP (9)
- UI (1)
- 编程错误及处理 (38)
- 多线程 (18)
- hibernate (10)
- Web Service (3)
- struts2 (6)
- log4j (3)
- SVN (4)
- DWR (1)
- lucene (1)
- 正则表达式 (4)
- jstl (2)
- SSL (3)
- POI (1)
- 网络编程 (1)
- 算法 (2)
- xml (4)
- 加密解密 (1)
- IO (7)
- jetty (2)
- 存储过程 (1)
- SQL Server (1)
- MongoDB (1)
- mybatis (1)
- ETL (1)
- Zookeeper (1)
- Hadoop (5)
- Redis (1)
- spring cloud (1)
最新评论
-
ron.luo:
牛逼,正解!
maven设定项目编码 -
lichaoqun:
java.sql.SQLException: Can't call commit when autocommit=true -
Xujian0000abcd:
Thanks...
Cannot proxy target class because CGLIB2 is not available. Add CGLIB to the clas -
renyuan2ni:
[i][b][u]引用[list]
[*][img][flas ...
Manual close is not allowed over a Spring managed SqlSession -
851228082:
宋建勇 写道851228082 写道<!-- 文件拷贝时 ...
maven设定项目编码
/** * MultiThreadShareData.java * cn.com.songjy.test.socket.thread * Function: TODO * * version date author * ────────────────────────────────── * 1.0 2013-8-17 songjy * * Copyright (c) 2013, TNT All Rights Reserved. */ package cn.com.songjy.test.socket.thread; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * ClassName:MultiThreadShareData * 多个线程之间共享数据的方式探讨 * @author songjy * @version 1.0 * @since v1.0 * @Date 2013-8-17 上午10:13:54 */ public class MultiThreadShareData { private static Log log = LogFactory.getLog(MultiThreadShareData.class); private static int c = 5;//设定递增和递减的次数 public static void main(String[] args) { /* 简单卖票模拟 * * 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个 * Runnable对象中有那个共享数据,卖票系统就可以这么做 * */ SellTicket sell = new SellTicket(); new Thread(sell).start(); new Thread(sell).start(); final InDe data02 = new InDe(); /* 递增递减模拟一 * * 将共享数据封装在另一个对象中,然后将这个对象逐一传递给各个Runnable对象, * 每个线程对共享数据的操作方法也分配到那个对象身上去完成,这样容易实现针对该数据进行的各个操作的互斥和通信 * */ for(int i=0; i<c; i++) new Thread(new Runnable() { @Override public void run() { data02.increment(); } }).start(); for(int i=0; i<c; i++) new Thread(new Runnable() { @Override public void run() { data02.decrement(); } }).start(); /* 递增递减模拟二 * * 将共享数据封装在另一个对象中,每个线程对共享数据的操作方法也分配到那个对象身上去去完成, * 对象作为这个外部类中的成员变量或方法中的局部变量,每个线程的Runnable对象作为外部类中的成员内部类或局部内部类 * */ for(int i=0; i<c; i++) new Thread(new MyRunnable01(data02)).start(); for(int i=0; i<c; i++) new Thread(new MyRunnable02(data02)).start(); try { Thread.sleep(2 * 1000l); } catch (InterruptedException e) { log.error(e.getMessage(), e); } log.info(data02.getJ());//等待所有线程结束后输出结果一定是0,否则线程不安全 } } class SellTicket implements Runnable { private static Log log = LogFactory.getLog(SellTicket.class); private int count = 100; @Override public void run() { while (count>0) { log.info("售票窗口"+Thread.currentThread().getName()+"正在卖出一张票了,剩余票数:" + count); count--; log.info("售票窗口"+Thread.currentThread().getName()+"卖出一张票了,剩余票数:" + count); } log.info("所有票已售完"); } } class InDe { private static Log log = LogFactory.getLog(InDe.class); private int j = 0; public int getJ() { return j; } public void setJ(int j) { this.j = j; } public void increment() { log.info(Thread.currentThread().getName()+"递增前结果:"+j); j++; log.info(Thread.currentThread().getName()+"递增后结果:"+j); } public void decrement() { log.info(Thread.currentThread().getName()+"递减前结果:"+j); j--; log.info(Thread.currentThread().getName()+"递减后结果:"+j); } } class MyRunnable01 implements Runnable{ private InDe data; MyRunnable01(InDe data) { this.data = data; } @Override public void run() { data.increment(); } } class MyRunnable02 implements Runnable{ private InDe data; MyRunnable02(InDe data) { this.data = data; } @Override public void run() { data.decrement(); } }
多个线程之间共享数据的方式探讨
发表评论
-
java.io.NotSerializableException: java.util.ArrayList$SubList
2016-03-15 11:36 2867错误信息: 原代码: if (null != dto ... -
java.lang.NoSuchMethodError
2015-10-30 19:50 1266在执行命令 java -Djava.ext.dirs=./de ... -
OutOfMemoryError
2015-01-07 10:49 679错误信息: 执行命令(修改前): java -Djava. ... -
自定义ClassLoader
2014-12-14 17:13 889一、自定义类加载器代码: package foo; im ... -
ExecutorService.shutdown()应该是在线程执行完毕后,才会去关闭
2014-04-29 13:03 19582看到一个博客,如下 Jav ... -
URL传递中文参数乱码问题
2014-03-14 12:55 1157项目特殊要求,form表单使用get方式提交,由此出现了中文乱 ... -
Java使用正则进行奇偶替换
2013-12-30 11:20 1595/** * 将位于偶数位的数字1替换为2 */ ... -
Java调用ping命令
2013-11-26 10:26 3717package cn.com.songjy; impor ... -
Linux开机启动Java程序
2013-11-25 15:26 3593一、编写启动Java程序shell脚本(smssend.sh) ... -
单例模式
2013-11-05 09:58 793Java之美[从菜鸟到高手演变]之设计模式 Java开发中 ... -
判定2个对象相等之重写equals方法
2013-10-18 11:03 1100package cn.com.songjy.test; ... -
SAX解析XML文件示例
2013-09-13 17:32 1047package cn.com.songjy.test.xml; ... -
二分查找算法(Binary Search)
2013-09-13 17:01 2467项目中遇到需要从数组中查找数据,但是算法很多,于是根据项目需求 ... -
Iterate over rows and cells(EXCEL文件的读取)
2013-09-13 14:13 4101package cn.com.songjy.test.exce ... -
jdk1.5的Exchanger同步工具
2013-08-27 14:04 704package cn.com.songjy.test.sock ... -
jdk1.5的CountDownLatch同步工具
2013-08-27 13:37 817package cn.com.songjy.test.sock ... -
jdk1.5的Semaphere同步工具
2013-08-23 14:20 1094package cn.com.songjy.test.so ... -
jdk1.5条件阻塞Condition的应用
2013-08-23 09:42 1367package cn.com.songjy.test.sock ... -
jdk1.5读写锁技术的妙用
2013-08-19 22:00 1396/** * ReadWriteLockTest.java ... -
jdk1.5的线程锁技术
2013-08-19 20:25 968/** * LockTest.java * cn.co ...
相关推荐
"多线程之间的线程通信"是确保多个线程协同工作、避免数据不一致性和提高程序效率的关键概念。在本话题中,我们将深入探讨线程通信的原理、方法,以及潜在的危险。 首先,线程通信是指在一个进程中,不同的线程之间...
本主题将深入探讨如何在MFC的多线程环境中通过消息传递来交换数据。 首先,我们要了解MFC对多线程的支持。MFC提供了一个CWinThread类,它是所有线程的基础。创建新线程时,通常会从CWinThread派生一个新的类,并...
2. **全局变量或共享内存**:如果数据量较大或者需要在多个线程间共享,可以使用全局变量或者共享内存区域。这种方式需要注意线程同步问题,以防止多个线程同时读写同一数据导致的数据冲突。易语言提供了“互斥量”...
在这个"多线程互斥实例 多线程获取同一变量"的示例中,我们将探讨如何在多个线程中安全地访问共享资源,避免数据不一致性和竞态条件。 首先,我们需要理解多线程中的一些核心概念: 1. **线程**:线程是操作系统...
5. **线程同步**:当多个线程可能同时访问共享数据时,必须使用线程同步机制,如互斥量(Mutex)、信号量(Semaphore)或事件对象(Event),以防止数据竞争和不一致。 6. **导出和导入函数**:在DLL中,需要使用`...
在多线程环境中,多个线程可能需要同时访问相同的资源,例如内存变量、文件系统或数据库连接等。如果不加以控制,这种并发访问可能会导致数据不一致和其他问题,如死锁、竞态条件等。因此,实现线程间的资源共享和...
在Qt框架中,多线程(Multithreading)是一种重要的技术,它允许应用程序同时执行多个任务,提升程序的效率和响应性。特别是在处理耗时计算或者I/O操作时,多线程能显著改善用户体验。本篇文章将深入探讨如何在Qt ...
总结,易语言线程返回数据的方法涉及到线程的创建、数据共享机制和同步策略等多个方面。开发者需要根据实际需求选择合适的方法,确保数据正确、安全地从线程返回。对于源码的学习和实践,是提升编程技能的有效途径。
线程是程序执行的最小单位,一个进程可以包含多个线程。在Java中,我们可以使用`Thread`类或者`Runnable`接口来创建线程。然而,为了更好地管理和控制线程,Java并发包提供了如`ExecutorService`、`Future`、`...
在DELPHI编程环境中,有时候我们需要在多个程序之间共享数据或变量,这通常是由于应用程序间的协同工作、数据传递或是为了优化资源管理。本教程将深入探讨如何实现多个DELPHI程序间的变量共享。 首先,我们要了解...
然而,当多个线程访问和修改同一资源时,可能会引发数据不一致、竞态条件等问题,这就需要我们进行资源共享的管理。 `synchronized`关键字是Java中用来控制多线程并发访问共享资源的一种机制。它提供了互斥访问,...
这防止了多个线程对同一资源的竞态条件,确保数据的一致性。 同步则是控制线程执行顺序和协调的方式。C#提供了多种同步机制,如`Monitor`、`Semaphore`和`Mutex`等。其中,`Monitor`使用了.NET框架的锁对象,可以...
1. **线程安全**:当多个线程访问共享数据时,必须确保数据的一致性和完整性。为此,可以使用锁、信号量、原子操作等同步机制,防止数据竞争。 2. **负载均衡**:在分配任务给线程时,要尽可能使每个线程的工作负载...
在"javaSocket的Tcp通信方式两个线程,一个线程接收数据一个线程发送数据"这个场景下,我们将探讨如何通过多线程来优化TCP通信的效率和响应性。 首先,TCP(Transmission Control Protocol)是一种面向连接的、可靠...
- **连接池概念**:连接池预先初始化一定数量的数据库连接,供多个线程共享,避免频繁创建和销毁连接的开销。 - **常用连接池组件**:例如C3P0、Druid、HikariCP等,它们提供自动管理、监控、性能优化等功能。 - ...
然而,当多个线程需要共享数据或协调工作时,线程间的通信就变得至关重要。"多线程之间消息通信"这一主题主要探讨了如何在不同线程间传递信息,实现有效的协作。 线程间通信(Inter-Thread Communication,ITC)是...
在多线程环境中,当多个线程需要访问同一块内存时,就出现了共享内存。这种共享使得线程间通信更为直接,但也可能导致数据不一致,因此需要适当的同步机制。 这就引出了加锁的概念。在C++中,互斥锁(Mutex)是一种...
当多个线程访问共享资源时,可能会产生竞态条件,导致数据不一致。Java提供了同步机制来解决这个问题,包括`synchronized`关键字、`Lock`接口(如`ReentrantLock`)等。例如,以下代码中的`next()`方法可能引发竞态...
1. **数据竞争**:当两个或多个线程试图同时修改一个全局变量时,由于线程调度的随机性,可能会导致最终结果不符合预期。例如,线程A读取变量值,然后线程B修改了这个值,但线程A在计算后仍用旧值更新变量,这就会...
跨线程提交数据涉及到两个或多个线程之间共享和修改同一份数据。这通常需要特殊的同步机制,以防止竞态条件和死锁。竞态条件是指当两个或更多线程同时访问和修改同一资源时,结果依赖于线程的执行顺序,可能导致不...