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

在同一个类中,线程资源竞争

    博客分类:
  • java
阅读更多

 

 

/**
 * 在同一个类中,线程资源竞争
 *
 */
public class ThreadTest12 implements Runnable {  
	
    public static ThreadTest12 test1;
    
    public static ThreadTest12 test2;
    
    public static void main(String[] args) throws InterruptedException {
    	new Thread(new ThreadTest12()).start();
    	//new Thread(new ThreadTest12()).start();
    	/*
    	1 都是 synchronized (test1)  
    	Thread-0
    	Thread-1
    	Thread-0start run1
    	Thread-0end   run1
    	Thread-1start run2
    	Thread-1end   run2
    	
    	2  一个是 synchronized (test1)  另一个是 synchronized (test2)
    	Thread-0
		Thread-1
		Thread-0start run1
		Thread-1start run2
		Thread-0end   run1
		Thread-1end   run2
    	 */


	}
    
    
    public static ThreadTest12 instentce() {
    	
    	String name = Thread.currentThread().getName();
		if ("Thread-0".equals(name)) {
			if (test1 == null) {
				test1 = new ThreadTest12();
			}
	    	return test1;
		} else {
			if (test2 == null) {
				test2 = new ThreadTest12();
			}
	    	return test2;
		}
    }
    
    private void run1() throws InterruptedException {
    	System.out.println(Thread.currentThread().getName());
    	synchronized (test1) {
    		System.out.println(Thread.currentThread().getName() + "start run1");
    		Thread.sleep(9900);
    		System.out.println(Thread.currentThread().getName() + "end   run1");
    		//ThreadTest12.instentce().run2();
        }
    }
    
    private void run2() throws InterruptedException {
    	System.out.println(Thread.currentThread().getName());
    	
    	// synchronized (test2)  没有发生资源竞争
    	synchronized (test1) { // 发生资源竞争
    		System.out.println(Thread.currentThread().getName() + "start run2");
    		Thread.sleep(9900);
    		System.out.println(Thread.currentThread().getName() + "end   run2");
        }
    }

	@Override
	public void run() {
		try {
			String name = Thread.currentThread().getName();
			if ("Thread-0".equals(name)) {
				ThreadTest12.instentce().run1();
			} else {
				ThreadTest12.instentce().run2();
			}
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

} 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    linux线程同步.pdf

    数据竞争是指两个或多个线程同时访问同一个共享资源,并且至少有一个线程在写操作时,没有适当的同步机制来保护该资源。死锁是指两个或多个线程相互等待对方释放资源,导致无法继续执行的情况。饥饿是指一个线程因为...

    linux之线程同步一.doc

    在Linux中,线程同步是一种控制多个线程之间交互的方式,以确保它们按照预期的顺序执行和避免数据竞争。线程同步在多线程编程中非常重要,因为它可以确保各个线程之间的数据安全和正确性。 以下是Linux中常见的线程...

    Java多线程下解决资源竞争的7种方法详解

    主要介绍了Java多线程下解决资源竞争的7种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Linux系统编程之线程同步

    线程同步,指一个线程发出某一功能调用时,在没有得到结果之前,该调用不返回。同时其它线程为保证数据一致性,不能调用该功能。 举例1: 银行存款 5000。柜台,折:取3000;提款机,卡:取 3000。剩余:2000 举例2...

    模拟jdbc多线程竞争资源---【Eclipse项目】

    模拟jdbc多线程竞争资源---【Eclipse项目】

    C#线程锁介绍源码

    实际上在web开发中大多数逻辑都是在单个线程中展开的,一个请求都会在一个单独的线程中处理,其中的大部分变量都是属于这个线程的,根本没有必要考虑锁 定,当然对于ASP.NET中的Application对象中的数据,我们就要...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)__(0521).rar

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例)__(0521).rar

    Python写的多线程使用互斥锁解决资源竞争的问题(带中文注释)

    Python写的多线程使用互斥锁解决资源竞争的问题的代码,可以直接运行,并且带中文注释,方便初学者学习和使用。

    C#-WinForm跨线程修改UI界面的实例

    多个线程竞争读写同一个资源往往会造成意想不到的意外结果,UI界面也是一种资源,所以跨线程修改UI界面往往被加以限制。这里采用Task + MethodInvoker的方式完成跨线程对UI对的修改。

    linux之线程同步的概要介绍与分析

    在Linux操作系统中,线程同步是多线程编程中的一个核心概念,它确保了多个线程在访问共享资源时的正确性与一致性,避免了诸如数据竞争和竞态条件等问题。为了实现这一目标,Linux提供了一系列强大的线程同步机制和...

    java多线程中测试同步的小程序

    这是我做的一个很简单的多线程同步程序,目的是为了测试多线程编程下如何使用同步(synchronized)防止产生竞争共享资源的错误状态,从中得到的心得是:一定要将你所共享的变量封装在一个类中,将所有有关该变量的...

    Java毕业设计-Java多线程与线程安全实践-基于Http协议的断点续传.rar

    Java多线程与线程安全实践-基于Http协议的断点续传.rar 是一个Java毕业设计项目,旨在探讨如何在Java中实现多线程和线程安全,以及如何基于Http协议实现断点续传功能。该项目提供了一个完整的源代码包,可以作为学习...

    c语言多进程多线程编程.pdf

    进程是一个具有独立功能的程序关于某个数据集合的一次而可以并发执行的运行活动,是处于活动状态的计算机程序。进程作为构成系统的基本细胞,不仅是系统内部独立运行的实体,而且是独立竞争资源的基本实体。 进程是...

    Java多线程编程的优点和缺点

    比如我们经常用的迅雷下载,都喜欢多开几个线程去下载,谁都不愿意用一个线程去下载,为什么呢?答案很简单,就是多个线程下载快啊。 简化程序结构、模块化、异步化:例如我们实现电商系统,下订单和给用户发送短信、邮件...

    Java多线程之Executor框架.docx

    没有一个池来限制线程的数量,如果并发量很高,会创建很多线程,而且线程之间可能会有相互竞争,这将会过多占用系统资源,增加系统资源的消耗量。而且线程数量超过系统负荷,容易导致系统不稳定。

    C面向对象多线程编程

    资源名称:C 面向对象多线程编程内容简介: 全面讲解构建多线程架构与增量多线程编程技术。第1章介绍了用于构建面向对象程序的不同类型C 组件,以及如何...资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    09-同步概念、互斥锁解决资源竞争的问题.flv

    学习python多任务

    Java多线程系列——-多线程的风险问题

    死锁的含义是指一组线程在执行过程中竞争资源导致的一种阻塞的现象,其原因是其中的每一个线程都在等待仅由该组中其他线程才可以释放的资源,这样每个线程都在等待其他线程释放自己的资源,而本身并不会释放资源,...

    多线程+同步+锁和条件+示例

    多线程+同步+锁和条件+示例 - 本资源是一个多线程的示例,展示了如何用Java的锁和条件对象实现线程间的同步,避免数据的不一致和竞争条件。

    多线程编程

    windows多线程编程包括线程同步、资源竞争等问题

Global site tag (gtag.js) - Google Analytics