- 浏览: 515909 次
- 性别:
- 来自: 武汉
文章分类
- 全部博客 (268)
- C/C++ (5)
- LUA (0)
- JVM (6)
- UML (1)
- J2SE (43)
- J2EE (15)
- EXTJS (1)
- HTML5 (47)
- ANDROID (2)
- JAVASCRIPT (51)
- WEB SERVICES (0)
- 数据库 (2)
- 数据结构 (0)
- 应用服务器 (11)
- 设计模式应用 (0)
- JAVA性能与缓存 (1)
- ByteCode (5)
- RCP (0)
- Plugin (0)
- Eclipse (3)
- 程序人生 (14)
- Mobile (2)
- Linux/Ubuntu (31)
- sublime (2)
- python (15)
- Git (5)
- NodeJs (3)
- Crosswalk (1)
- Browserify (1)
- Backbone (1)
最新评论
多线程访问共享数据方式总结:
1.若每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,如卖票系统.
2.若每个线程执行的代码不同,这时需要用不同的Runnable对象,有以下几种方式来实现这些Runnable对象之间的数据共享:
2.1将共享数据封装在另外一个对象中,然后将这个对象逐一传递给各个Runnable对象,每个线程对共享数据的操作方法也分配到那个对象上去完成,这样容易实现针对该数据进行的各种操作的互斥与通信.
2.2将这些Runnable对象作为一个类中的内部类,共享数据作为这个外部类中的成员变量,每个线程对共享数据的操作方法也分配给外部类,以便实现对共享数据进行的各种操作的互斥与通信.
总之,要同步互斥的几段代码最好是分别放在几个独立的方法中,这些方法再放在同一个类中,这样容易实现针对该数据进行的各种操作的互斥与通信.
如简单的卖票系统实现
public class Ticket { private int ticket = 10; private Lock lock = new ReentrantLock(); public void getTicket() { lock.lock(); try { Thread.sleep(1000); if (ticket > 0) { System.out.println(Thread.currentThread().getName() + "买票:ticket = " + ticket--); } } catch (Exception e) { e.printStackTrace(); } finally { lock.unlock(); } } }
public class MyLock implements Runnable{ private Ticket ticket = new Ticket(); public void run() { for (int i = 0; i < 10; i++) { // 买票 ticket.getTicket(); } } public static void main(String[] args) { MyLock lock = new MyLock(); Thread t1 = new Thread(lock); Thread t2 = new Thread(lock); Thread t3 = new Thread(lock); t1.start(); t2.start(); t3.start(); } }
发表评论
文章已被作者锁定,不允许评论。
-
关于Thread.IsAlive属性
2015-07-04 12:12 882今天在讨论多线程的时候,谈到了这个属性。IsAlive,顾名 ... -
Java:对象的强、软、弱和虚引用
2015-02-28 11:00 731文章源自:http://zhangjunhd.blog.51 ... -
一个通用并发对象池的实现
2015-01-20 09:32 733Source: http://ifeve.com/gener ... -
如何创建不可变的Java类或对象
2015-01-07 16:29 2183在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过 ... -
并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
2014-12-29 11:49 803文章源自:http://www.cnblogs.com/li ... -
中断线程深入
2014-12-25 15:18 795本文转自http://jiangzhengjun.itey ... -
深入java.lang.ThreadLocal类
2014-12-24 16:50 709文章源自:http://lavasoft.blog.51c ... -
Java 8新特性探究(3):解开lambda最强作用的神秘面纱
2014-07-10 17:50 711文章源自:http://developer.51cto.co ... -
Java 8特性探究(2):深入解析默认方法
2014-07-08 11:12 782文章源自:http://develop ... -
Java 8特性探究(1):通往lambda之路_语法篇
2014-07-08 09:59 691文章源自:http://developer.51cto.c ... -
java文件复制方法参考
2013-12-02 14:17 730最快的文件复制方法 private static ... -
用Java数字签名提供XML安全
2013-11-29 16:11 13134文章源自:http://www. ... -
深入理解HashMap的工作原理
2013-11-18 15:49 824HashMap的工作原理是近 ... -
JDBC4.0 驱动加载过程
2013-01-16 10:09 3634注意,jdbc4.0不再需要显示调用class.fo ... -
Java自定义的类加载器
2013-01-15 08:38 1014一、类加载器类别 * 1.java虚拟机自带的加载器 ... -
使用Log4j生成不同日志级别的日志文件
2012-12-26 17:09 5332在src根目录下存放log4j.xml文件,具体配置如下(测试 ... -
深入理解HashMap
2012-12-13 10:08 865文章摘自:http://www.iteye.c ... -
java字节码加解密
2012-06-30 09:53 1096一.创建KEY class Key { ... -
java动态代理简单实现
2012-06-30 09:45 1026一.接口 public interface Foo { ... -
线程池简单实现
2012-06-25 11:42 1097其实线程池的实现就是生产者消费者问题 的实现,理解了生产者消 ...
相关推荐
Qt 线程间共享数据是本文介绍的内容,多的不说,先来啃内容。Qt线程间共享数据主要有两种方式: 使用共享内存。即使用一个两个线程都能够共享的变量(如全局变量),这样两个线程都能够访问和修改该变量,从而达到...
标题"Qt 多线程访问同一个变量"涉及到的是如何在多线程环境下确保对共享资源(此处为一个全局变量)的安全访问。描述中提到了使用互斥锁来解决这个问题,并通过创建两个线程ThreadA和ThreadB来演示这一过程。 首先...
这个子程序可能包含了网络请求、数据解析、错误处理等步骤,是多线程访问网页的核心部分。 5. **异步编程**:为了防止主线程被长时间阻塞,多线程访问通常采用异步编程模型。易语言提供了异步调用的机制,如“异步...
- **共享资源**:多线程访问共享数据可能导致数据不一致,需使用同步机制确保数据的一致性。 - **死锁**:当两个或更多线程互相等待对方释放资源导致无法继续执行的状态,应避免死锁的发生。 4. **并发工具类** ...
- 为避免资源竞争,确保线程安全,特别是在多个线程访问共享数据时。 通过理解和应用这些概念,开发者可以构建出高效且用户体验良好的WinForm应用,即使在处理大量数据时也能保持界面的响应性。
- **同步锁的概念**:在多线程环境下,当共享资源访问需要保持一致性时,可以使用同步锁。Java中的`synchronized`关键字可实现此功能,它能保证同一时刻只有一个线程执行特定代码段。 - **锁的应用**:在读取或...
本篇将详细介绍两种线程访问共享对象和数据的情况,并通过代码实例进行解析。 1. **线程执行相同代码的情况**: 在这种情况下,多个线程执行的任务相同,如多个售票窗口同时售卖同一组票。这时,可以创建一个包含...
本压缩包“多线程操作共享文件.zip”显然是一个关于如何在Delphi中实现多线程间互斥访问共享文件的示例项目。 标题“多线程操作共享文件.zip”直接揭示了主题,即通过多线程技术处理同一份文件,这在分布式系统、...
在这个"多线程互斥实例 多线程获取同一变量"的示例中,我们将探讨如何在多个线程中安全地访问共享资源,避免数据不一致性和竞态条件。 首先,我们需要理解多线程中的一些核心概念: 1. **线程**:线程是操作系统...
- **Mutex类**:这是一个跨进程的同步对象,可以用来协调不同进程中的线程访问共享资源。`Mutex`类通常用于需要更细粒度控制的情况。 示例代码: ```csharp Mutex objMutex = new Mutex(false, "ThreadLock"); ...
3. **共享数据与线程同步**:使用全局变量或共享内存,配合同步原语避免数据冲突。 4. **事件驱动编程**:利用事件替代延时,提高线程的利用率。 理解并掌握这些知识点,开发者就能在易语言中高效地编写多线程程序...
标题与描述均提到了“多线程同步大量数据转录”的概念,这涉及到在计算机科学领域中的并发编程技术,特别是如何有效地处理大规模数据集的转录工作。在现代软件开发中,多线程同步机制是优化性能、提高系统吞吐量的...
另外,Qt还提供了QSharedMemory和QSystemSemaphore等高级同步机制,适用于跨进程的共享数据。这些工具可以帮助你在多进程环境中实现全局缓冲区的共享,但要注意它们的使用方式和线程安全问题。 总结来说,Qt 5.12.3...
1. **线程安全**:由于多线程环境下可能存在数据竞争,所以在访问共享资源(如数据库连接)时,需要确保线程安全。可以使用`synchronized`关键字或者`Lock`来同步访问。 2. **事务管理**:在多线程环境中,可能需要...
5. **读写锁模式**:在多线程访问共享数据时,读操作通常比写操作更频繁且不会改变数据。ReentrantReadWriteLock提供了一种读写分离的锁机制,允许多个读线程同时访问,但写线程独占资源,提高了并发性能。 6. **...
`synchronized`关键字是Java中用来控制多线程并发访问共享资源的一种机制。它提供了互斥访问,确保同一时间只有一个线程可以执行特定代码块。`synchronized`可以修饰方法或者代码块,当一个线程进入`synchronized`...
本文将深入探讨多线程访问网页这一主题,涵盖其原理、实现方式以及在实际应用中的挑战与优化策略。 一、多线程的基本概念 多线程是操作系统提供的一个特性,允许单个程序创建多个并发执行的线程。每个线程都有自己...
多线程访问的难点在于管理和协调线程间的交互,防止数据损坏。例如,当一个线程正在修改一个对象时,其他线程必须等待其完成才能进行操作,这就需要用到线程同步原语。此外,还需要注意异步回调、线程间的通信以及...
通过比较使用临界区和不使用临界区的情况,我们可以观察到线程安全访问共享资源的重要性。不使用临界区时,可能会出现数据不一致、资源冲突等问题,导致程序运行错误或者结果不可预测。而在正确使用临界区后,尽管...
1. **线程安全**:当多个线程访问共享数据时,必须确保数据的一致性和完整性。为此,可以使用锁、信号量、原子操作等同步机制,防止数据竞争。 2. **负载均衡**:在分配任务给线程时,要尽可能使每个线程的工作负载...