`
schy_hqh
  • 浏览: 558478 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

(多线程)多线程的并发安全

 
阅读更多

 

多线程并发操作同一个资源

 

同步锁: 多线程操作的锁必须唯一

 

必须搞清楚:哪些代码需要同步?

那些在操作共享资源的代码,只要包含非读的操作,或者根据共享资源进行条件判断的,就需要同步!

 

同步代码块解决

 

package com.gc.thread;

/**
 * 多线程操作共享资源---并发---线程安全问题---同步---锁---相对而言性能下降,但可接受
 * 通过Runnable(的子类)封装共享资源
 * 线程可能在run()中代码的任意位置被阻塞
 * 控制线程的准入条件非常关键 --->同一把锁
 * 
 * 涉及多线程并发,必须注意2点
 * 1.多个线程操作同一个资源
 * 2.使用同一个锁
 */
public class MutilThread implements Runnable {
	//共享的资源
	private int num = 1000;
	
	//唯一的锁
	Object mutex = new Object();
	
	@Override
	public void run() {
		while(true) {
			//锁只要没释放,其它线程就无法进入--弊端:消耗资源
			//synchronized (this) {
			synchronized (mutex) {
				try {
						if(num<=0)
							break;
						doJob();
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	public void doJob() throws InterruptedException {
		Thread.sleep(10);
		System.out.println(Thread.currentThread().getName()+"--->"+ (num--));
	}
	
}

 

开启多线程,操作共享资源num

package com.gc.thread;

public class Demo {
	public static void main(String[] args) {
		
		MutilThread runnable = new MutilThread();
		
		//传入同一个Runnable接口子类对象,让多线程操作Runnable中封装的共享资源
		Thread a = new Thread(runnable);
		Thread b = new Thread(runnable);
		Thread c = new Thread(runnable);
		Thread d = new Thread(runnable);
		
		//开启线程  【注意:一个线程只能调用1次start(),多次调用将抛"线程运行状态异常"】
		a.start();
		b.start();
		c.start();
		d.start();
	}
}

 

分享到:
评论

相关推荐

    java 多线程并发实例

    在Java编程中,多线程并发是提升程序执行效率、充分利用多核处理器资源的重要手段。本文将基于"java 多线程并发实例"这个主题,深入探讨Java中的多...通过不断学习和实践,我们可以编写出高效、安全的多线程并发程序。

    并发服务器-多线程服务器详解

    一种典型的多线程并发服务器架构如下: - **主监听线程**:负责接收客户端连接请求。 - **工作线程池**:由多个工作线程组成,负责处理具体的客户端请求。 **3. 示例代码片段** 下面是一个简单的多线程服务器示例...

    基于Qt的多线程并发服务器

    "基于Qt的多线程并发服务器"是一个典型的解决方案,它利用了Qt库的强大功能,特别是其对多线程的支持,来处理来自多个客户端的并发请求。下面我们将深入探讨这个主题。 首先,Qt是一个跨平台的应用程序开发框架,...

    多线程并发技术

    在现代软件开发中,多线程并发技术是提高程序性能和响应速度的关键因素之一。随着计算机硬件的性能持续提升,程序也必须能够有效地利用多核处理器来实现真正的并行处理。JVM(Java虚拟机)作为Java应用程序的运行...

    WEBAPI多线程并发测试工具

    标题"WEBAPI多线程并发测试工具"指出,这是一个专门针对Web API进行多线程并发测试的工具。Web API通常指的是应用程序接口,它们允许不同的服务之间进行通信,以实现数据交换和功能整合。多线程并发测试则是验证在多...

    多线程 高并发

    这里,我们主要探讨的是如何通过编写多线程并发程序来优化应用程序的性能,提高系统的处理能力。 首先,多线程是指在一个进程中同时执行多个线程。线程是操作系统调度的基本单位,它允许程序同时执行多个任务。多...

    Tesseract OCR多线程并发识别案例

    在处理大量图像或需要快速响应时间的应用场景中,多线程并发识别可以显著提升效率。以下将详细介绍如何利用Tesseract OCR实现多线程并发识别,以及可能涉及的相关技术点。 首先,理解Tesseract OCR的基本工作原理是...

    多线程并发处理的简单实现

    在编程领域,多线程并发处理是一种常见的优化技术,它能充分利用多核处理器的资源,提高程序的执行效率。在给定的标题“多线程并发处理的简单实现”中,我们可以深入探讨如何构建这样的系统。 首先,多线程并发处理...

    Java 模拟线程并发

    Java 模拟线程并发是编程领域中的一个重要概念,尤其在多核...理解和熟练应用这些知识,能够帮助开发者编写出高效、安全的多线程程序。在实际开发中,应根据具体需求选择合适的并发策略,以实现最佳性能和资源利用率。

    多线程,高并发.zip

    在IT领域,多线程和高并发是两个关键概念,特别是在Java编程中,它们对于构建高效、可扩展的系统至关重要。下面将详细解释这两个概念及其在Java中的实现和应用。 多线程是指在一个应用程序中同时运行多个独立的执行...

    Java_多线程与并发编程总结.doc

    在多线程环境下,线程安全和同步问题变得尤为重要。Java提供了多种同步机制,如`synchronized`关键字、`wait()`、`notify()`和`notifyAll()`方法,以及`Lock`接口(包括`ReentrantLock`等)来避免竞态条件和死锁的...

    java多线程并发

    ### Java多线程并发知识点详解 #### 一、Java多线程并发简介 在现代软件开发中,特别是在Java这样的主流编程语言中,多线程并发技术是提高程序执行效率、优化资源利用的关键手段之一。本篇文章将深入探讨Java中的...

    多线程并发处理数据的问题

    综上所述,多线程并发处理数据涉及到Java并发编程的诸多方面,包括线程创建、线程池管理、线程安全和同步、死锁避免以及性能优化。通过合理的并发设计,我们可以有效提高系统的响应速度和处理能力。在实际开发中,...

    C#(Csharp)多线程HTTP并发请求(HttpWebRequest)采集蜘蛛

    在C#编程中,开发网络爬虫或者进行批量HTTP请求时,多线程并发请求能够显著提高效率。本文档主要介绍如何使用C#的HttpWebRequest类实现多线程并发HTTP请求,以创建高效的采集蜘蛛程序。 首先,网络爬虫的工作流程...

    Java多线程与并发库高级应用

    并发库高级应用\多线程\Java

    java多线程和并发.pdf

    Java多线程与并发编程是Java语言中用于处理多任务执行的关键技术,它能够帮助开发者设计出能够有效应对高并发请求的应用程序。在现代的线上(Online)和离线(Offline)应用中,合理利用多线程技术可以大幅提高系统...

    Linux下基于socket多线程并发通信的实现.pdf

    "Linux下基于socket多线程并发通信的实现" 本文主要探讨Linux操作系统下基于socket多线程并发通信的实现。 socket是UNIX系统开发中的网络通信接口,可以对台计算机之间的通信规范进行合理定义,从而达到通信的目的...

    多线程并发执行任务

    在IT领域,多线程并发执行任务是一种常见的优化策略,特别是在服务器端开发、实时系统以及高性能计算中。本文将深入探讨多线程并发执行任务的相关知识点,并基于提供的`MyThread.java`文件,来分析和理解如何在Java...

    C#多线程开发之并发编程经典实例.zip

    10. **线程安全的数据结构**:`Concurrent`系列类(如`ConcurrentQueue`, `ConcurrentStack`, `ConcurrentDictionary`等)提供了线程安全的集合,可以在多线程环境下安全地读写数据。 11. **死锁与活锁**:死锁是两...

Global site tag (gtag.js) - Google Analytics