- 浏览: 31740 次
- 性别:
- 来自: 北京
最新评论
-
Corwen:
INSERT ... ON DUPLICATE KEY UPD ...
mysql insert的几点操作(DELAYED 、IGNORE、ON DUPLICATE KEY UPDATE )
import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** *有时候线程取得lock后需要在一定条件下才能做某些工作,比如经典的Producer和Consumer问题 *在Java 5.0以前,这种功能是由Object类的wait(),notify()和notifyAll()等方法实现的 *在5.0里面,这些功能集中到了Condition这个接口实现 */ /** * 使用Condition的关键技术点如下: * 1.通过Lock的newCondition方法创建Condition的对象 * 2.Condition的await方法使当前线程进入等待状态,并且释放它占据的Lock,直到有其他的线程唤醒当前线程时,重新占有Lock. * 3.Condition的signal方法唤醒其他正在等待该Condition的线程. */ public class ConditionTest { /** * 篮子程序,这里为了简化问题,篮子中最多只能有一个苹果 * Consumer必须在篮子里有苹果的时候才能吃苹果,否则它必须暂时放弃对篮子的锁定 * 等到Producer往篮子里放了苹果后再去拿来吃。 * 否则它也需要暂时解锁等Comsumer把苹果吃了才能往篮子里放苹果。 */ public static class Basket{ //锁 Lock lock = new ReentrantLock(); //根据锁产生Condition对象 Condition produced = lock.newCondition(); Condition consumed = lock.newCondition(); //篮子里的苹果数,最多为1 int num = 0; //生产苹果,往篮子里放 public void produce() throws InterruptedException{ //获得锁 lock.lock(); System.out.println("Producer get a lock..."); try{ //判断是否满足生产条件 while(num == 1){ //如果有苹果,则不生产,放弃锁,进入睡眠 //等待消费者消费 System.out.println("Producer sleep..."); consumed.await(); System.out.println("Producer awaked..."); } //生产苹果 Thread.sleep(500); System.out.println("Producer produced an Apple."); num = 1; //通知等待produced Condition的线程 produced.signal(); }finally{ lock.unlock(); } } //消费苹果,从篮子里取 public void consume() throws InterruptedException{ //获得锁 lock.lock(); System.out.println("Consumer get a lock..."); try{ //判断是否满足消费条件 while(num == 0){ //如果没有苹果,无法消费,则放弃锁,进入睡眠 //等待生产者生产苹果 System.out.println("Consumer sleep..."); produced.await(); System.out.println("Consumer awaked..."); } //吃苹果 Thread.sleep(500); System.out.println("Consumer consumed an Apple."); num = 0; //发信号唤醒某个等待consumed Condition的线程 consumed.signal(); } finally { lock.unlock(); } } } //测试Basket程序 public static void testBasket() throws Exception{ final Basket basket = new Basket(); //定义一个producer Runnable producer = new Runnable(){ public void run() { try{ basket.produce(); }catch(InterruptedException ex){ ex.printStackTrace(); } } }; //定义一个consumer Runnable consumer = new Runnable(){ public void run(){ try{ basket.consume(); }catch(InterruptedException ex){ ex.printStackTrace(); } } }; //各生产3个consumer和producer ExecutorService service = Executors.newCachedThreadPool(); for(int i = 0; i <3; i++){ service.submit(producer); } for(int i = 0;i<3;i++){ service.submit(consumer); } service.shutdown(); } public static void main(String... args)throws Exception{ ConditionTest.testBasket(); } }
发表评论
-
apache 中的EqualsBuilder和HashCodeBuilder
2012-05-04 10:27 991自动化hashCode()和equals() 问题产生:当需 ... -
Java 中的Double Check Lock
2012-05-03 10:53 1589对于多线程编程来说 ... -
JDK5.0新特性系列---11.6线程 BlockingQueue
2012-05-02 11:05 730importjava.util.concurrent. ... -
JDK5.0新特性系列---11.5.4线程 同步装置之Exchanger
2012-05-02 11:05 702/** * Exchanger让两个线程互换信息 ... -
JDK5.0新特性系列---11.5.2线程 同步装置之CountDownLatch
2012-05-02 11:05 796import java.util.concurrent ... -
JDK5.0新特性系列---11.5.1线程 同步装置之Semaphore
2012-05-03 10:54 718import java.util.ArrayList; ... -
JDK5.0新特性系列---11.2线程 任务执行架构
2012-05-03 10:54 838import java.util.concurrent. ... -
JDK5.0新特性系列---11.3线程 锁Lock
2012-05-03 10:54 765import java.util.concurrent. ... -
JDK5.0新特性系列---11.1线程 Callable和Future
2012-05-03 10:54 1181import java.util.concurrent. ... -
JDK5.0新特性系列---8.泛型编程
2012-04-28 08:58 820import java.util.ArrayList; ... -
JDK5.0新特性系列---10.监控与管理虚拟机
2012-04-28 08:58 859import java.lang.management ... -
JDK5.0新特性系列---9.注释功能Annotation
2012-04-28 08:58 784import java.lang.annotation. ... -
JDK5.0新特性系列---7.使用ProcessBuilder执行本地命令
2012-04-28 08:57 908import java.io.BufferedReade ... -
JDK5.0新特性系列---6.格式化输出
2012-04-28 08:57 586import java.util.Date; / ... -
JDK5.0新特性系列---5.可变长参数Varargs
2012-04-26 21:53 565/** * 在J2SE5.0之前,当传入到方法的参数 ... -
JDK5.0新特性系列---4.静态导入
2012-04-26 21:51 685/** *静态导入:是指可以import类的静态方法 ... -
JDK5.0新特性系列---3.枚举类型
2012-04-26 21:50 606/** *enum关键字表示枚举类型,它的作用相当于 ... -
JDK5.0新特性系列---2.新的for循环
2012-04-26 21:48 646import java.util.ArrayList; ... -
JDK5.0新特性---1.自动装箱和拆箱
2012-04-26 21:44 856/** * 基本类型的数据值可以直接赋给基本数据对象 ... -
JAVA移位运算符)
2012-04-20 13:32 823移位运算符就是在二 ...
相关推荐
JDK5.0_下载-安装-配置
jdk5.0新特性介绍
[浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part [浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part
jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-windows-x64jdk-8u131-...
jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u311-windows-x64.exe.zip jdk-8u311-windows-x64.exe jdk-8u...
2.JDK5.0新特性.doc 2.JDK5.0新特性.doc
jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows-i586,jdk-6u39-windows...
JDK5.0新特性,视频教学课件,可用容易学
jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-windows-x64 jdk-6u21-...
[浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part [浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part
[浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part [浪曦][原创]JDK5.0新特性[风中叶老师主讲]共10 part
浪曦 - JDK5.0新特性.part2
浪曦 - JDK5.0新特性.part3
JDK5.0新特性 因为,在1.5版本中,对一个整数进行包装,使之成为一个Integer对象(即包装,boxing),然后加入到一个ArrayList中的做法被认为是没有必要的,反之,解包(unboxing)的做法也是没有必要的,这样的...
jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_linux-x64_bin.tar.gz文件 jdk-11.0.19_...
(1)jdk-8u301-linux-aarch64.rpm (2)jdk-8u301-linux-aarch64.tar.gz (3)jdk-8u301-linux-arm32-vfp-hflt.tar.gz (4)jdk-8u301-linux-i586.rpm (5)jdk-8u301-linux-i586.tar.gz (6)jdk-8u301-linux-x64....
jdk5.0新特性 包括泛型,增强的for循环,自动的封箱和拆箱
jdk-8u131-windows-i586jdk-8u131-windows-i586jdk-8u131-windows-i586jdk-8u131-windows-i586jdk-8u131-windows-i586jdk-8u131-windows-i586jdk-8u131-windows-i586jdk-8u131-windows-i586jdk-8u131-windows-i586...
jdk1.5以上版本中新增加的特性描述,带有代码例子让你很清晰的明白jdk的 常量 、枚举、 for each、反射等各种新的特性,相信需要的你,一定满足。
浪曦 - JDK5.0新特性.part5.rar