多线程
文章平均质量分 83
静静~嗯嗯
这个作者很懒,什么都没留下…
展开
-
JAVA 并发编程-传统线程同步通信技术(四)
首先介绍几个概念: wait()方法 wait()方法使得当前线程必须要等待,等到另外一个线程调用notify()或者notifyAll()方法。 当前的线程必须拥有当前对象的monitor,也即lock,就是锁。 线程调用wait()方法,释放它对锁的拥有权,然后等待另外的线程来通知它(通知的方式是notify()或者notifyAll()方法),这样它才能重新获得锁的拥有权和恢复执原创 2015-07-22 11:03:58 · 2845 阅读 · 4 评论 -
JAVA 并发编程-应用篇
提到java多线程不免有些人会头大,很多概念都是很理解但是真正到了实战的时候又是不知道如何操作了,下面就结合实际项目来说说多线程的应用。业务需求: 举例:批量插入10万条用户的相关活动优惠券 操作方式:使用固定10个大小的线程池来做,并每次处理1000条插入数据线程类:注实现Callable接口的是能得到返回值的线程类对应的业务实现类:问题在于,当我们需要使用多线程操作时,一般会先查询原创 2016-03-02 15:27:32 · 3746 阅读 · 4 评论 -
javaEE开发中使用session同步和token机制来防止并发重复提交
通常在普通的操作当中,我们不需要处理重复提交的,而且有很多方法来防止重复提交。比如在登陆过程中,通过使用redirect,可以让用户登陆之上重定向到后台首页界面,当用户刷新界面时就不会触发重复提交了。或者使用token,隐藏在表单中,当提交时进行token验证,验证失败也不让提交。这都是一般的做法。我们这次碰到的问题是重复提交本身就是一个错误,重复提交会导致一些相关数据的逻辑不再正确。重复提交--转载 2016-01-09 16:10:49 · 8094 阅读 · 5 评论 -
Spring 并发访问的线程安全性问题
首先对于Spring的IOC来说,对象是由Spring来帮我们管理,也就是在Spring启动的时候,在Spring容器中,由Spring给我们创建的,Spring会帮我们维护,一般都是单例的,也就是一个对象。spring生成对象默认是单例的。通过scope属性可以更改为多例。 下面我们来一个网上的例子:package test; import java.util.Date;impor原创 2015-12-20 15:42:23 · 34994 阅读 · 8 评论 -
JAVA 并发编程-线程池(七)
线程池的作用: 线程池作用就是限制系统中执行线程的数量。 根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果;少了浪费了系统资源,多了造成系统拥挤效率不高。用线程池控制线程数量,其他线程排队等候。一个任务执行完毕,再从队列的中取最前面的任务开始执行。 为什么要用线程池: 1.减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务。2.可以根据系统的承受能原创 2015-07-27 19:21:57 · 2530 阅读 · 4 评论 -
JAVA 并发编程-多个线程之间共享数据(六)
多线程共享数据的方式: 1,如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,卖票系统就可以这么做。2,如果每个线程执行的代码不同,这时候需要用不同的Runnable对象,例如,设计4个线程。,其中两个线程每次对j增加1,另外两个线程对j每次减1,银行存取款 有两种方法来解决此类问题:将共享数据封装成另外一个对象,然后将这个对象逐一传递原创 2015-07-25 10:09:05 · 43013 阅读 · 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 · 7830 阅读 · 5 评论 -
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 · 2663 阅读 · 5 评论 -
JAVA 并发编程-传统线程互斥技术(Synchronized)(三)
java线程互斥是为了保证,同一时刻最多只有一个线程执行该段代码。那么它的出现又是为了解决什么问题呢?账户存取款,在同一时间段只能让一个人进行操作。 下面来看一个简单实例(多线程带来的问题):public class TraditionalThreadSynchronized { /** * @param args */ public static void main(String[原创 2015-07-21 20:44:37 · 2961 阅读 · 3 评论 -
JAVA 并发编程-读写锁之模拟缓存系统(十一)
在多线程中,为了提高效率有些共享资源允许同时进行多个读的操作,但只允许一个写的操作,比如一个文件,只要其内容不变可以让多个线程同时读,不必做排他的锁定,排他的锁定只有在写的时候需要,以保证别的线程不会看到数据不完整的文件。这时候就需要使用读写锁。/** * 简单读写锁demo * @author hejingyuan * */public class ReadWriteLockTest原创 2015-08-01 17:31:44 · 2929 阅读 · 3 评论 -
JAVA 并发编程-线程同步工具类(十二)
本文主要介绍一些java线程同步工具类,并不进行具体讲解,当有需要时,可以再去结合实例学习。 信号灯(Semaphore) 应用场景举例: 例如公司的打卡系统,如果有一个打卡机,那么一次就只能有一个人打卡,其余的人就被阻塞住,打卡完以后就可由下一个人打卡。如果有3个打卡机,那么一次就允许3个人或者少于三个人打卡,其余的人就得等待打卡机空闲下来才能继续打卡。 结果: 已进入1个线程,还可进入2个已进原创 2015-08-01 17:31:10 · 2346 阅读 · 3 评论 -
JAVA 并发编程-线程同步通信技术(Lock和Condition)(十)
在之前的博客中已经介绍过线程同步通信技术《JAVA 并发编程-传统线程同步通信技术(四)》,上篇是使用的synchronized,wait,notify来实现,今天我们使用的是Lock和Condition,下面我们结合两者对比来学习。 简单的Lock锁应用:/** * 简单Lock的应用 * @author hejingyuan * */public class LockTest {原创 2015-08-01 10:01:48 · 2624 阅读 · 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 · 6503 阅读 · 6 评论 -
JAVA 并发编程-基于线程池设计的ScheduledExecutor(八)
上篇博客《JAVA 并发编程-线程池(七)》中曾介绍到newScheduledThreadPool(intcorePoolSize),创建corePoolSize大小的线程池。此线程池支持定时以及周期性执行任务的需求。 接下来我们一起来分析一下Java中几种任务调度实现与比较 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务。 Timer相信大家都已经非常熟悉jav转载 2015-07-29 09:08:45 · 2040 阅读 · 3 评论 -
Spring线程池开发实战
作者:chszs,转载需注明。作者博客主页:http://blog.csdn.net/chszs本文提供了三个Spring多线程开发的例子,由浅入深,由于例子一目了然,所以并未做过多的解释。诸位一看便知。前提条件:1)在Eclipse创建一个Java项目,我取名为SpringThreadDemo。2)项目所需的JAR包如图所示: 下面开始。注:项目源码已经托管到GitHub,地址:https://转载 2016-05-25 14:58:00 · 7067 阅读 · 1 评论