`
arne3166
  • 浏览: 132893 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

线程冲突1

阅读更多
class DataObject {
	int dataItem1;
	int dataItem2;
	DataObject() {
		dataItem1 = 50;
		dataItem2 =50;
	}
	void itemSwap() {
		int x = (int)( -4.999999+Math.random() * 10);
		dataItem1 -= x;
		keepBusy( 10 );
		dataItem2 += x;
	}
	void test() {
		int sum = dataItem1 + dataItem2;
		System.out.println( sum );
	}
	public void keepBusy( int howLong ) {
		long curt = System.currentTimeMillis();
		while( System.currentTimeMillis() < curt + howLong );
	}
}

class RepeatedSwaps extends Thread {
	DataObject dobj;
	RepeatedSwaps( DataObject d ) {
		dobj = d;
		start();
	}
	public void run() {
		int i = 0;
		while( i<20000 ) {
			dobj.itemSwap();
			if( i % 4000 == 0 ) {
				dobj.test();
			} 
			try {
				sleep( ( int )( Math.random() * 2 ) );
			}catch( InterruptedException e) {}
			i++;
		}
	}
}
public class UnsynchedSwaps {
	public static void main(String[] args) {
		DataObject d = new DataObject();
		new RepeatedSwaps( d );
		new RepeatedSwaps( d );
		new RepeatedSwaps( d );
		new RepeatedSwaps( d );
		new RepeatedSwaps( d );
		new RepeatedSwaps( d );
	}	
}

 

分享到:
评论

相关推荐

    swt线程冲突与解决

    ### SWT线程冲突与解决 在使用SWT(Standard Widget Toolkit)进行图形界面开发时,开发者往往会遇到一个常见的问题——线程冲突。由于SWT组件的设计原则是基于单线程模型,即所有的UI操作必须在UI主线程中执行,...

    线程同步机制解决多线程资源访问冲突

    1. **人工重置事件**:当事件被触发(SetEvent)时,所有等待该事件的线程都会被唤醒。这意味着开发者需要手动调用ResetEvent函数来恢复事件的未设置状态,否则其他线程可能会继续尝试访问共享资源,造成混乱。 2. ...

    多线程程序避免冲突的3条简单规则

    3. 避免静态变量:静态变量是类级别的共享,容易引起线程冲突。如果必须使用,考虑使用`java.lang.ThreadLocal`,它为每个线程提供单独的变量副本。 第二条规则:使用线程安全的数据结构 Java提供了一些内置的线程...

    线程冲突 – Thread interference

    这种通信方式非常高效,但存在两个问题:线程冲突(thread interference) , 内存一致性错误(memory consistensy errors)。  解决这两种问题的方法是 线程同步(thread synchronization)。在介绍线程同步之前...

    Delphi多线程的安全问题分析及解决

    1. **共享资源的访问冲突**:当多个线程尝试同时访问同一份资源(如全局变量、共享对象等)时,如果没有适当的同步措施,可能会导致数据不一致或者程序崩溃等问题。 2. **线程中断处理不当**:在某些情况下,如果...

    多线程冲突异常解决办法.md

    多线程冲突异常解决办法.md

    多线程之间的线程通信

    互斥则是为了防止多个线程同时访问共享资源,从而导致数据冲突。 常见的线程通信机制包括: 1. **信号量(Semaphore)**:用于控制对共享资源的访问,当资源可用时,信号量值会减一,当资源不足时,线程会被阻塞,...

    mysql是线程不安全的,mysql不是线程安全的,多线程共用同一个mysql连接是会崩溃的.所以同样QT的QSqlDatabase也是线程不安全的,QS会崩溃

    mysql是线程不安全的,mysql不是线程安全的,多线程共用同一个mysql连接是会崩溃的 QT的QSqlDatabase是基于mysql的,所以一样是线程不安全的 现讲明mysql为什么是线程不安全的,以及在多线程环境下如何使用mysql,...

    Android项目设计与开发:UI线程冲突.ppt

    嵌入式Android项目设计与开发 第七章 多线程 ——(2)UI线程冲突 多线程 即使Android可以使用线程, 但规定不能使用子线程修改主线程的内容。 多线程 可以考虑在子线程中使用runOnUiThread重新载入UI线程,并干预...

    vc++中的线程锁(线程锁保持线程同步)

    线程同步是多线程编程中的一个核心问题,它涉及到多个线程之间协调执行的机制,以防止在共享数据上的冲突。当多个线程试图同时修改同一份数据时,可能会导致数据的不一致性和错误。线程锁就是用来解决这个问题的一种...

    易语言线程暂停与继续

    - 在多线程协作中,暂停线程可以实现同步,防止数据冲突。 了解了这些基本概念后,你可以通过“线程暂停与继续”源码进一步学习易语言中线程操作的实践方法。这份源码可能包含了创建线程、挂起线程、恢复线程、...

    多线程操作串口示例(带modbus

    在实际应用中,多线程串口操作需要注意线程安全问题,例如防止多个线程同时访问同一串口资源导致的数据冲突。同步机制如锁(Lock)、信号量(Semaphore)或条件变量(Condition)可以用来控制对串口资源的访问。此外...

    C#的多线程示例;几个多线程之间的互斥,同步;WPF主界面INVOKE

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在UI应用如Windows Presentation Foundation (WPF) 中,多线程能有效提升程序的响应性和性能。本文将深入探讨C#中的多线程机制,包括线程互斥与同步,以及...

    易语言 利用超级列表框多线程参数传递文本

    1. **线程创建与执行**:在易语言中,可以使用`创建线程`命令创建新的线程,传入一个函数作为线程的入口点。这个函数将在线程内部执行,负责处理任务。 2. **参数传递**:线程间传递参数通常有两种方式:全局变量和...

    易语言线程返回数据的方法

    1. **使用全局变量**:线程执行完毕后,可以修改全局变量,然后由主线程或其他线程读取。这种方式简单,但不适用于复杂的同步需求。 2. **事件机制**:线程执行完后,可以通过触发一个事件,将结果传递给事件处理...

    C#多线程List的非线程安全性

    2. 指针冲突:如果两个线程同时尝试扩容,可能会导致两个线程各自创建了一个新数组,然后都试图将旧数组的数据复制过来,最终导致数据混乱。 3. 内存泄漏:如果线程A完成了扩容,而线程B还在操作旧数组,那么旧数组...

    线程及线程应用总结

    1. **线程基础** - 线程是操作系统分配CPU时间的基本单位,一个进程可以包含一个或多个线程。 - Java中通过`java.lang.Thread`类或者实现`Runnable`接口来创建线程。 - 主线程:每个Java应用程序都有一个主线程,...

    C#多线程消息处理例子

    为了保证UI的响应性,后台线程不能直接修改UI元素,因为这可能导致线程冲突。为了解决这个问题,C#引入了消息队列和委托机制。消息队列用于存储待处理的消息,而委托则作为方法的引用,允许异步调用。 在这个例子中...

    Delphi多线程详解_delphi_delphi多线程_多线程_

    2. 互斥量(Mutex):一次只允许一个线程访问资源,防止并发冲突。 3. 信号量(Semaphore):控制对有限资源的访问数量。 4. 条件变量(Condition):线程等待特定条件满足后才能继续执行。 四、线程优先级 Delphi...

    .NET多线程实例

    "命名空间"在多线程编程中起到组织和封装代码的作用,确保不同线程间的代码不发生冲突。正确地使用命名空间能提高代码的可读性和可维护性。 "多态和类的继承"在多线程环境下,可以实现更灵活的代码设计。子类可以...

Global site tag (gtag.js) - Google Analytics