java 并发 多线程
本专栏写了大量的有关java 方面的多线程有关的知识,希望大家共同学习进步
静静~嗯嗯
这个作者很懒,什么都没留下…
展开
-
JAVA 并发编程-线程同步工具类(十二)
本文主要介绍一些java线程同步工具类,并不进行具体讲解,当有需要时,可以再去结合实例学习。 信号灯(Semaphore) 应用场景举例: 例如公司的打卡系统,如果有一个打卡机,那么一次就只能有一个人打卡,其余的人就被阻塞住,打卡完以后就可由下一个人打卡。如果有3个打卡机,那么一次就允许3个人或者少于三个人打卡,其余的人就得等待打卡机空闲下来才能继续打卡。 结果: 已进入1个线程,还可进入2个已进原创 2015-08-01 17:31:10 · 2341 阅读 · 3 评论 -
JAVA 并发编程-读写锁之模拟缓存系统(十一)
在多线程中,为了提高效率有些共享资源允许同时进行多个读的操作,但只允许一个写的操作,比如一个文件,只要其内容不变可以让多个线程同时读,不必做排他的锁定,排他的锁定只有在写的时候需要,以保证别的线程不会看到数据不完整的文件。这时候就需要使用读写锁。/** * 简单读写锁demo * @author hejingyuan * */public class ReadWriteLockTest原创 2015-08-01 17:31:44 · 2923 阅读 · 3 评论 -
JAVA 并发编程-线程同步通信技术(Lock和Condition)(十)
在之前的博客中已经介绍过线程同步通信技术《JAVA 并发编程-传统线程同步通信技术(四)》,上篇是使用的synchronized,wait,notify来实现,今天我们使用的是Lock和Condition,下面我们结合两者对比来学习。 简单的Lock锁应用:/** * 简单Lock的应用 * @author hejingyuan * */public class LockTest {原创 2015-08-01 10:01:48 · 2595 阅读 · 5 评论 -
JAVA 并发编程-返回执行结果(Callable和Future)(九)
启动一个线程不论使用Thread或者Runnable的时候,都是没有返回结果的。也就是说Thread和Runnable的run()方法必须没有返回值。 public void run(){} 解决方案: Callable和Future,一个产生结果,一个拿到结果。 简单的来一个实例demo帮助我们理解:public class CallableAndFuture { /** * @pa原创 2015-07-30 10:12:38 · 6471 阅读 · 6 评论 -
JAVA 并发编程-基于线程池设计的ScheduledExecutor(八)
上篇博客《JAVA 并发编程-线程池(七)》中曾介绍到newScheduledThreadPool(intcorePoolSize),创建corePoolSize大小的线程池。此线程池支持定时以及周期性执行任务的需求。 接下来我们一起来分析一下Java中几种任务调度实现与比较 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。 Timer相信大家都已经非常熟悉jav转载 2015-07-29 09:08:45 · 2008 阅读 · 3 评论 -
JAVA 并发编程-线程池(七)
线程池的作用: 线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排队等候。一个任务执行完毕,再从队列的中取最前面的任务开始执行。 为什么要用线程池: 1.减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。2.可以根据系统的承受能原创 2015-07-27 19:21:57 · 2499 阅读 · 4 评论 -
JAVA 并发编程-多个线程之间共享数据(六)
多线程共享数据的方式: 1,如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,卖票系统就可以这么做。2,如果每个线程执行的代码不同,这时候需要用不同的Runnable对象,例如,设计4个线程。,其中两个线程每次对j增加1,另外两个线程对j每次减1,银行存取款 有两种方法来解决此类问题:将共享数据封装成另外一个对象,然后将这个对象逐一传递原创 2015-07-25 10:09:05 · 42884 阅读 · 20 评论 -
JAVA 并发编程-线程范围内共享变量(五)
线程范围内共享变量要实现的效果为: 多个对象间共享同一线程内的变量未实现线程共享变量的demo:package cn.itcast.heima2;import java.util.HashMap;import java.util.Map;import java.util.Random;public class ThreadScopeShareData { private stati原创 2015-07-23 15:43:54 · 7801 阅读 · 5 评论 -
JAVA 并发编程-传统线程同步通信技术(四)
首先介绍几个概念: wait()方法 wait()方法使得当前线程必须要等待,等到另外一个线程调用notify()或者notifyAll()方法。 当前的线程必须拥有当前对象的monitor,也即lock,就是锁。 线程调用wait()方法,释放它对锁的拥有权,然后等待另外的线程来通知它(通知的方式是notify()或者notifyAll()方法),这样它才能重新获得锁的拥有权和恢复执原创 2015-07-22 11:03:58 · 2819 阅读 · 4 评论 -
JAVA 并发编程-传统线程互斥技术(Synchronized)(三)
java线程互斥是为了保证,同一时刻最多只有一个线程执行该段代码。那么它的出现又是为了解决什么问题呢?账户存取款,在同一时间段只能让一个人进行操作。 下面来看一个简单实例(多线程带来的问题):public class TraditionalThreadSynchronized { /** * @param args */ public static void main(String[原创 2015-07-21 20:44:37 · 2931 阅读 · 3 评论 -
JAVA 并发编程-线程创建(二)
对于线程的创建及更加详细的信息可以参看博客《JAVA--线程》,下面是对线程创建的细化及简单再实现。在java中如果要创建线程的话,一般有两种方式:1)继承Thread类;2)实现Runnable接口。 方式一:继承Thread类 MyThread:package com.tgb.hjy;public class MyThread extends Thread{ private Stri原创 2015-07-21 16:25:22 · 2636 阅读 · 5 评论 -
JAVA 并发编程-线程与进程的由来(一)
在学习Java编程之初,我们就接触过Java线程,当时敲过代码也总结过,但是现在看来还是有点缺陷,并没有联系线程的由来来说明问题,只是简单的介绍了什么是进程,什么是线程,以及它们之间的关系-《Java-线程》。今天我们从进程和线程的由来来补充一下之前的总结。参考:http://www.cnblogs.com/dolphin0520/p/3910667.html一.操作系统中为什么会出现进程?说起进原创 2015-07-09 14:28:40 · 3444 阅读 · 5 评论