并发编程学习
大邦
一个曾是文青的程序猿
展开
-
java守护线程(deamon)学习
Deamon学习1.定义:守护线程。是用来对用户线程(非守护线程)服务的,当一个程序中的所有非守护线程结束的时候,deamon线程也就失去了其存在的意义,此时jvm退出。2.对比:守护线程中所创建的所有线程默认都是守护线程,同理,非守护线程中所创建的线程默认是非守护线程。3.注意:例子程序中,yield()方法与sleep方法类似,都会放弃线程执行的优先级。但sleep方法不会放弃资源原创 2013-10-28 11:05:16 · 1338 阅读 · 0 评论 -
高并发学习之使用Condition实现三个线程轮转&阻塞缓冲区
package com.lei.lock;/**@author leixingbang_sx*Mail:leixingbang_sx@qiyi.com*@create 2016/1/25 16:11*desc */import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock原创 2016-01-25 16:43:41 · 548 阅读 · 0 评论 -
高级并发学习之Samphere同步工具学习
Semaphore可以用来维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数。例如,实现一个文件允许的并发访问数。Semaphore实现的功能类似于厕所有5个坑,假如有十个人要上厕所。那么同时能去上厕所的人只能有5个,当5个人中有任何一个人离开后,其中在等待的五个人中又有一个可以占用了。此外在Semaphore中可以设置等待的线程里的pack原创 2016-01-25 18:33:19 · 1025 阅读 · 0 评论 -
高级并发编程学习之cyclicBarrier
同步工具之cyclicBarrier表示大家彼此等待,等大家集合号以后才开始出发。分散活动后又在指定地点集合碰面,好像公司利用周末时间集体郊游一样,先从各自家出发到公司集合后,再同时出发到公园游玩,先到的阻塞等待,从最后到的开始,在指定地点集合后再开始就餐。package com.lei.lock;/**@author leixingbang_sx*Mail:leixingbang_s原创 2016-01-26 10:51:00 · 485 阅读 · 0 评论 -
高级并发学习之CountDownLatch闭锁
如同倒数计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当计数达到0的时候,则调用所有等待者或者单个等待者开始执行。 可以实现一个人(也可以是多个人)等待所有人都来通知他,也可以实现一个人通知多个人的效果。类似于裁判一声口令,所有的运动员开始奔跑,只有当所有的程序员都跑到终点的时候,裁判员才公布结果。示例代码:package com.lei.lock原创 2016-01-26 12:32:35 · 534 阅读 · 0 评论 -
高级并发编程学习之使用Exchanger
用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿到数据的人讲一直等待第二个人拿着数据到来时候,才能交换彼此数据。package com.lei.lock;import java.util.concurrent.Exchanger;import java.util.concurrent.ExecutorService;import java.util.原创 2016-01-27 10:44:35 · 518 阅读 · 1 评论 -
高级并发编程学习-atomic包学习(重点介绍AtomicInteger、AtomicIntegerFieldUpdater)
并发编程学习笔记,此章节介绍了java.con介绍Java.util.concurrent.atomic包,其中重点说明了 AtomicInteger、AtomicIntegerFieldUpdater原创 2016-01-11 12:25:07 · 4449 阅读 · 2 评论 -
高级并发学习之 各种线程池的使用
import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurre原创 2016-01-11 15:36:56 · 445 阅读 · 0 评论 -
高级并发编程学习-callable与Future的使用
FutureTask可用于异步获取执行结果或取消执行任务的场景。通过传入Runnable或者Callable的任务给FutureTask,直接调用其run方法或者放入线程池执行,之后可以在外部通过FutureTask的get方法异步获取执行结果,因此,FutureTask非常适合用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。另外,FutureTask还可以确保即使调用了多次run方法,它都只会执行一次Runnable或者Callable任务,或者通过cancel取消FutureTask的执行等原创 2016-01-11 19:05:28 · 2921 阅读 · 0 评论 -
使用lock&condition实现生产者消费者
package Consumer;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/* *jdk 1.5提供了升级解决方案:提供了显示的锁机制以及显示的对象上等待唤醒机制,将原创 2015-09-29 20:43:59 · 601 阅读 · 0 评论 -
并发编程学习:使用读写锁来编写高效率的缓存系统
package com.lei.lock;/**@author leixingbang_sx*Mail:leixingbang_sx@qiyi.com*@create 2016/1/20 10:22*desc 缓存例子 */import java.util.Random;import java.util.concurrent.locks.ReadWriteLock;impor原创 2016-01-21 11:52:57 · 1100 阅读 · 0 评论 -
面试经验——如何创建不可变(Immutable)的Java类或对象
在前一篇文章里将了如何实现线程安全的Java程序,其中有一条就是可以通过创建不可变的对象来实现!因为不可变的对象默认就是线程安全的,他们一旦创建就不能发生改变!那么如何创建不可变的Java类或者对象呢?follow me,I'll show you ~原创 2015-09-15 10:08:21 · 945 阅读 · 0 评论 -
Struts2中 出现Exception starting filter struts2 java.lang.NullPointerException
原因是设置(调试模式)后,struts有漏洞,tomcat安装路径出现空格的时候,会导致此异常抛出。例如我的安装路径为:C:\Tomcat 6.0\bin 注意 中间有空格 将其改为C:\Tomcat6.0\bin 后 重启tomcat问题解决。原创 2013-11-14 14:26:16 · 980 阅读 · 0 评论 -
java IO流的使用方式
流是一个很形象的概念,当程序需要读取数据的时候,就会开启一个通向数据源的流,这个数据源可以是文件,内存,或是网络连接。类似的,当程序需要写入数据的时候,就会开启一个通向目的地的流。这时候你就可以想象数据好像在这其中“流”动一样,如下图:java.io包是一组流类,分为:字节流:抽象父类是InputStreamOutputStream字符流:抽象父类是Reader和Write转载 2013-10-29 10:13:14 · 1229 阅读 · 0 评论 -
自己动手实现一个java过滤器类
过滤器采用了装饰者设计模式:package myFliter;import java.io.*;public class LowerCaseInputStream extends FilterInputStream{ public LowerCaseInputStream(InputStream in) { super(in); } @Override publi原创 2013-10-28 21:13:18 · 1459 阅读 · 0 评论 -
java 定时任务(基于java学习笔记)
一 java 定时任务基本流程1 创建任务类,两种方式。·1.1继承 TimerTask类,重写run方法 示例代码:package Timer;import java.util.TimerTask;public class myTask extends TimerTask{ @Override public void run() {原创 2014-04-28 16:55:44 · 728 阅读 · 0 评论 -
网络编程——获取主机名称和对应的ip地址
类:java.net.Itry{InetAddress []address=InetAddress.getAllByName("www.baidu.com");//通过主机名获取ip地址 for(InetAddress ad:address) { System.out.println(ad); System.out.println("---"+原创 2014-05-13 14:34:23 · 2228 阅读 · 0 评论 -
中断线程 —— interrupt() 以及对其理解
中断线程 —— interrupt() 一个正在运行的线程除了正常的时间片中断之外,能否被其他线程控制?或者说其他线程能否让指定线程放弃CPU或者提前结束运行? 除了线程同步机制之外,还有两种方法: (1) Thread.stop(), Thread.suspend(), Thread.resume() 和Runtime.runFinalizersOnExit转载 2014-04-25 16:43:09 · 1793 阅读 · 0 评论 -
线程异步学习(基于java学习笔记)
j原创 2014-04-28 15:22:07 · 1325 阅读 · 0 评论 -
多线程编程资源争用问题
一 基本概念 (1)执行任务有先后顺序时,称为同步(Synchronized),任务部分先后一同执行称为异步。 (2)实现实现多线程编程的两种方法: A.继承类Thread(所属的jar包 java.lang.Thread)。重写run方法。简单例子 Publicclass ThreadA extends Thread{ Publicvo原创 2014-04-25 08:57:04 · 2947 阅读 · 0 评论