`
arlxy
  • 浏览: 38383 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JAVA多线程之资源共享

    博客分类:
  • JAVA
阅读更多

将一个任务拆分成多个独立执行的子任务,这些子任务可以并行执行,而你却不需要为这些子任务如何并行执行浪费过多的心思,想想是一件多么令人心旷神怡的事情,有的人可能说,“喂,起始这些子任务实际上并不是并行执行”,但,多线程可以同时执行一个以上的线程,且每个线程都像独立运行一般,处理器时间的分配让大多数动作完成自己的任务,使用者的每个操作能及时得到正确响应,才是最主要的

 

多线程技术应用常见的问题之一就是资源共享的问题,打个比方来说,如果如果有个美女是你女朋友,突然来个男人告诉你,这个女人是他的女朋友,这个时候想想你的表情多么惊讶。又如,你在大街上散步,突然看到前面有100元,正当你弯腰要捡的时候钱却不见了!想想这些事情发生时候是多么的疯狂,所以,你必须声明这个美女是你的女朋友,在你和她没分手之前,不想和任何人共享,你在捡钱的时候可以大声喊“这100元是我的了”,将这些资源锁定,JAVA资源共享这是为解决这类问题而产生的,当然抽象到编程语言中了

 

 

1.方法同步,你可以将一个函数声明为synchronized函数,例如

synchronized void a(){}
synchronized void b(){}

 这样当你调用任何synchronized函数时,对象被锁定,改对象的所有synchronize函数便无法被调用,直到第一个函数执行完并且解除锁定为止,这种机制使用的是对象的锁(lock),不过线程可以唤起多个对象的synchronize函数,如果想要保护一个资源避免被多个线程同时使用,那么你可以强迫程序使用synchronized函数访问该资源

 

public synchronized static String setName(Object o){
		String t = o.getClass().toString();
		if(t.indexOf("class") != -1){
			t = t.substring(6);
		}
		return t;
}
	
public synchronized static void setupClosing(JFrame frame){
		frame.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e){
				System.exit(0);
			}
		});
}

 

 这样同一个对象的setupClosing()函数与setTitle()函数则不能同时被执行,因为只有一个锁,比如说当你抱着一个美女时,不允许任何一个在来对这个美女做任何动作,因为你现在是独占模式,除非你放开这个美女,即释放资源

 

2.同步区块,如

synchronized(this){
	Container c = getContentPane();
}

 表示,你必须具有这个对象的机锁,才可以进入这个区块,此种操作通常用于隔开程序的关键区

 

 锁定效率一般是你进入方法、离开方法所需时间的4倍(不包括执行程序主体所需时间) ,所以你必须慎重选择synchronized,当然你如果你为了效率而在多线程环境下不用synchronized,那么要么是你疯了,要么是使用者疯了

 

 

 

 

 

 

分享到:
评论

相关推荐

    多线程资源共享集合

    多线程资源共享,synchronized,Runnable,Thread

    Java多线程之基础篇(一).docx

    与此相反,像java所使用的这种并发系统会共享内存或I/O这样的资源,因此编程编写多线程程序最基本的困难在于,协调不同线程驱动的任务之间这些资源的使用,以便使得这些资源不会同时被多个任务访问。

    java多线程设计模式详解(PDF及源码)

    (注意,本资源附带书中源代码可供参考) 多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中...

    Java多线程与并发库高级应用视频教程22集

    Java多线程与并发库高级应用视频教程22集资源目录:【】01传统线程技术回顾【】02传统定时器技术回顾【】03传统线程互斥技术【】04传统线程同步通信技术【】04传统线程同步通信技术_分割纪录【】05线程范围内共享...

    java多线程(生产者与消费者)

    生产者消费者模式是java多线程经典的安全,它用到了同步,资源共享,wait,notify等技术。

    Java多线程pdf.rar

    部分主要阐述Thread的基础知识,详细介绍线程的API使用、线程安全、线程间数据通信,以及如何保护共享资源等内容,它是深入学习多线程内容的基础

    解析Java的多线程机制

    而Java应用程序中的多线程则是共享同一应用系统资源的多个并行代码执行 体,线程之间的通信和协调方法相对简单。 可以说:Java语言对应用程序多线程能力的支持增强了Java作为网络程序设计语言的优势,为实现分布式...

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

    Java多线程与线程安全实践-基于Http协议的断点续传.rar 是一个Java毕业设计项目,旨在探讨如何在Java中实现多线程下载和断点续传功能,同时确保线程安全。该项目的主要特点如下: 1. 多线程下载:项目采用了Java的...

    java多线程安全性基础介绍.pptx

    java多线程安全性基础介绍 线程安全 正确性 什么是线程安全性 原子性 竞态条件 i++ 读i ++ 值写回i 可见性 JMM 由于cpu和内存加载速度的差距,在两者之间增加了多级缓存导致,内存并不能直接对cpu可见。 ...

    Java多线程之进阶篇(一).docx

    与此相反,像java所使用的这种并发系统会共享内存或I/O这样的资源,因此编程编写多线程程序最基本的困难在于,协调不同线程驱动的任务之间这些资源的使用,以便使得这些资源不会同时被多个任务访问。

    java多线程资料

    多线程 思索问题解决 ...Java是第一个在语言的核心中支持线程,通过多线程的并发运行提高了系统资源的利用率,改善了系统性能,但由于多线程要共享内存资源,为了避免数据资源的使用混乱,必须对线程的同步问题作出解

    Java多线程之进阶篇(二).docx

    与此相反,像java所使用的这种并发系统会共享内存或I/O这样的资源,因此编程编写多线程程序最基本的困难在于,协调不同线程驱动的任务之间这些资源的使用,以便使得这些资源不会同时被多个任务访问。

    Java多线程之基础篇(二).docx

    与此相反,像java所使用的这种并发系统会共享内存或I/O这样的资源,因此编程编写多线程程序最基本的困难在于,协调不同线程驱动的任务之间这些资源的使用,以便使得这些资源不会同时被多个任务访问。

    java线程有关例题

    java线程 与动画相结合11.1 线程与线程类 11.2 线程的创建 11.3 线程的状态与调度 11.4 线程状态的改变 11.5 资源共享与对象锁 11.6 线程组

    92道Java多线程与并发面试题含答案(很全)

    线程池(ThreadPool):线程池是一种管理线程资源的模式,它减少了创建和销毁线程的开销,提高了系统的响应速度和吞吐量。 原子操作(Atomic Operations):原子操作是不可中断的操作,即在多线程环境中,这些操作...

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

    更好的资源利用:多线程可以更有效地使用计算机的资源,如CPU时间、内存和文件句柄等,提高了资源利用率。 支持并发编程:多线程编程是支持并发编程的基础,可以处理多个并发任务,如服务器处理多个客户端请求。 ...

    java学习多线程处理

    多线程开发的优势:改善用户体验,提高资源利用率(单线程的处理效率低下) 线程的使用步骤:定义一个线程,创建线程的实例,启动线程,终止线程 主线程:(java中所有的线程都是java.lang.Thread类或者其子类的一...

    java模拟多线程买票问题.docx

    多线程买票是java中的一个经典案例,其主要思想无非包括2点,synchronized和锁,两者中,前者实现同步,后者为同步的线程提供锁,从而实现多个线程共享同一份资源时候,能够同步进行; 经典的方式是synchronized + 锁...

Global site tag (gtag.js) - Google Analytics