`

137_多线程(多线程-同步函数)

阅读更多
/*
需求:银行有一个金库。
有两个储户分别存300元,每次存100,存3次

目的:该程序是否有安全问题,如果有,如何解决。

如何找问题:
1.明确哪些代码是多线程运行代码
2.明确共享数据
3.明确多线程运行代码中哪些语句是操作共享数据的
*/

class Banka{
	private int sum;
	public sychronized void add(int n){
		sum += n;
		try{
			Thread.sleep(10);
		}
		catch(Exception e){
			
		}
		System.out.println("sum = "+sum);
	}
}

class cus implements Runnable{
	private Bank b = new Bank();
	public void run(){
		for(int x=0;x<3;x++){
			b.add(100);
		}
	}
}

class Bank{
	public static void main(String[] args){
		Cus c = new Cus();
		Thread t1 = new Thread(c);
		Thread t2 = new Thread(c);
		t1.start();
		t2.start();
	}
}

同步函数,多个线程都需要操作的函数,加上sychronized。
分享到:
评论

相关推荐

    利用临界区的多线程同步测试.rar_临界区_多线程同步_线程 同步_线程同步

    "临界区"和"多线程同步"是解决这一问题的关键概念。临界区是一种同步机制,它允许一次只有一个线程访问特定的代码区域或资源,以避免并发访问时可能产生的数据竞争和不一致性。多线程同步则是为了协调多个线程的执行...

    vc++ multithread多线程教程---线程通信--利用事件对象,线程同步--使用信号量,线程同步--使用互斥量,线程同步--使用临界区

    本教程将深入探讨四种常见的线程同步机制:事件对象、信号量、互斥量以及临界区,帮助开发者理解和掌握如何在VC++中安全地实现多线程通信。 一、事件对象 事件对象是Windows API中用于线程间通信的一种同步机制。它...

    linux_code.rar_linux 多线程_linux 线程_多线程编程

    在Linux系统中,多线程编程是实现高效并发执行任务的一种常见方法。通过创建和管理多个线程,程序可以充分利用现代多核处理器的资源,提高软件的响应速度和整体性能。"linux_code.rar"这个压缩包包含了一些关于Linux...

    QT.rar_QT 多线程_QT 多线程_QT线程_qt多线程_多线程qt

    4. **线程同步**:为了避免竞态条件和死锁,QT提供了多种同步机制,如QMutex(互斥量)、QSemaphore(信号量)和QWaitCondition(等待条件)等。这些工具可以帮助开发者控制对共享资源的访问。 5. **线程退出**:...

    C#多线程_c#多线程_C#_多线程_

    在编程领域,多线程是实现并发执行任务的关键技术,特别是在C#这样的多平台支持的语言中。C#多线程允许程序同时执行多个独立的任务,从而提高应用的响应速度和性能。以下是对C#多线程进行详细讲解的知识点: 1. **...

    server_c_Linux.rar_linux 多线程_多线程 服务器_多线程通信

    2. **线程同步**:由于多线程环境下可能会存在数据竞争,因此需要使用`pthread_mutex_t`互斥锁或`pthread_rwlock_t`读写锁来保护共享资源的安全性,确保同一时刻只有一个线程访问。 3. **套接字编程**:服务器会...

    duoxiancheng.rar_多线程_多线程卖票

    标题“duoxiancheng.rar_多线程_多线程卖票”暗示了这是一个关于使用C语言在Linux系统上实现多线程并发卖票的项目。这个项目可能包含了一个简单的模拟程序,旨在帮助理解多线程编程的概念和挑战。下面我们将深入探讨...

    ListCtrl多线程.rar_C++ 线程 控件_ListCtrl线程_列表控件_多线程 数据_多线程程序

    本文将深入探讨如何在C++环境中利用多线程技术,特别是与ListCtrl控件相结合,实现数据的异步读取、显示和删除。 ListCtrl是Windows API中的一个重要控件,常用于显示列表或表格数据。在多线程环境中,它能提供更...

    大文件MD5多线程 - 副本.zip_多线程更新_文件夹同步

    在IT领域,多线程和文件同步是两个关键的概念,特别是在处理大文件和高效系统操作时。本项目“大文件MD5多线程 - 副本.zip_多线程更新_文件夹同步”显然是一个专门设计用于优化大型文件更新和文件夹同步的工具或程序...

    Windows多线程编程技术与实例-源代码

    下面将详细介绍Windows多线程编程的关键概念、API函数以及一些常见的使用场景。 1. **线程概念**: - **线程**是操作系统分配处理器时间的基本单元,每个进程至少包含一个线程。 - **主线程**:程序启动时默认...

    FileCopy2.rar_MFC文件复制_mfc cwinthread_多线程复制_多线程类_文件复制MFC

    在本文中,我们将深入探讨如何使用Microsoft Foundation Class (MFC) 库中的CWinThread类来实现多线程文件复制。MFC是微软提供的一种C++类库,它为Windows API提供了一种面向对象的封装,使开发者可以更容易地创建...

    Python库 | thread_worker-0.1.7-py3-none-any.whl

    在Python中,标准库中的`threading`模块提供了基础的多线程支持,包括Thread类、Lock、Semaphore等同步原语。然而,直接使用`threading`可能会涉及较多的细节管理,如线程的启动、停止、同步以及异常处理。thread_...

    CollThread_delphi_多线程_

    3. **同步机制**:由于多线程环境下可能存在数据竞争问题,因此需要使用如TSyncronizedQueue、TCriticalSection或TMonitor等同步组件来确保数据的安全访问。 4. **事件通知**:线程可能通过发布事件或者使用回调函数...

    c.rar_多线程排序_多线程排序c_快速排序

    总之,"c.rar_多线程排序_多线程排序c_快速排序"这个压缩包中包含了一个C语言实现的多线程快速排序程序,它利用了并发处理以提高大规模数据排序的效率。通过对文件的分析和理解,我们可以学习到如何在C语言中使用多...

    c++ 多线程编程之三----线程间通讯

    C++ 多线程编程之三----线程间通讯 C++ 多线程编程中,线程间通讯是非常重要的一部分。线程间通讯可以让不同的线程之间进行信息传递,实现协作和同步。在多线程编程中,线程间通讯可以使用全局变量、自定义消息等...

    堪称精品的VB多线程控制台源程序代码.rar_vb 多线程_vb6_vb6多线程_vb多线程_多线程

    在VB6中实现多线程通常需要使用API函数或者第三方组件,如Microsoft Windows SDK中的Windows API函数,或者是像MTA(多线程公寓模型)这样的技术。 在VB6中,我们首先需要了解如何调用API函数。API函数是操作系统...

    MFC多线程编程实例----多线程画线源码

    5. **线程同步与通信**:在多线程环境中,同步和通信是非常重要的。MFC提供了多种同步对象,如`CSemaphore`(信号量)、`CCriticalSection`(临界区)等,用于控制线程的执行顺序和资源访问。此外,`CEvent`可以用于...

    mfc_thread.rar_MFC thre_MFC多线程_mfc 多线程_mfc 多线程编程_多线程 MFC

    然而,多线程编程也带来了复杂性和挑战,如线程同步、资源竞争等问题,因此理解和熟练掌握这些概念是至关重要的。通过实践和学习,开发者可以充分利用MFC多线程特性,优化应用程序的性能和用户体验。

    multitreadsrc2.rar_MFC 多线程_MFC澶氱嚎绋嬬紪绋_mfc 多线程_线程

    多线程编程需要注意的问题包括数据共享、线程同步和线程安全。在MFC中,可以使用CSingleLock和CMultiLock类进行互斥锁操作,防止多个线程同时访问同一资源;CEvent类可以用来协调线程间的同步;而CWinApp::...

    WIN10_VS2019_配置_多线程_C语言.docx

    - 使用pthread库的API编写多线程代码,例如创建线程`pthread_create()`,同步线程`pthread_join()`,以及定义线程函数等,然后编译并运行项目,观察多线程是否正常工作。 通过以上步骤,你应该能够在VS2019中成功...

Global site tag (gtag.js) - Google Analytics