java 线程 学习笔记
来源:互联网 发布:怎么开个淘宝网店代销 编辑:程序博客网 时间:2024/05/07 20:18
1.创建
Thread thread = new Thread(task); //task为一个实现Runnable接口的任务实例
2.开始
thread.start();
3.线程池
ExecutorService executor = Executor.newFixedThreadPool(3);//创建一个最大线程数为3的线程池
executor.execute(任务1);
executor.execute(任务2);
executor.shutdown();//不再接受新任务,但会把当前的做完
4.synchronized关键字
synchronized(account){
account.deposit(1);
}
或者 public synchronized void deposit(double amount)在方法中加
5.利用加锁同步
- private static Lock lock=new ReentrantLock();
- private static Condition newDeposit=lock.newCondition();
- //一个条件对应一个锁
- lock.lock();获取锁
- newDeposit().await();//让存款任务进入休眠,等待sign
- newDeposit().signAll();//通知所有该条件的等待进程
- lock.unlock();释放锁
- 注意:条件是由锁创建的,为了调用条件的方法,必须首先拥有锁!!!
public class ThreadCooperation {private static Account2 account=new Account2();public static void main(String []args){ExecutorService executor=Executors.newFixedThreadPool(2);executor.execute(new DepositTask());executor.execute(new WithdrawTask());executor.shutdown();System.out.println("Thread 1\t\tThread 2\t\tBalance");}public static class DepositTask implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubtry{while(true){account.deposit((int)(Math.random()*10)+1);Thread.sleep(1000);}}catch(Exception e){e.printStackTrace();}}}public static class WithdrawTask implements Runnable{@Overridepublic void run() {// TODO Auto-generated method stubwhile(true){account.withdraw((int)(Math.random()*10+1));}}}}class Account2{private int balance=0;private static Lock lock=new ReentrantLock();private static Condition newDeposit=lock.newCondition();public int getBalance(){return balance;}public void withdraw(int amount){lock.lock();try{while(balance<amount){System.out.println("\t\t\tWait for a deposit");newDeposit.await();}balance-=amount;System.out.println("\t\t\tWithdraw "+amount+"\t\t"+getBalance());}catch(Exception e){e.printStackTrace();}finally{lock.unlock();}}public void deposit(int amount){lock.lock();balance+=amount;System.out.println("Deposit "+amount+"\t\t\t\t\t"+getBalance());newDeposit.signalAll();lock.unlock();}}
- java线程学习笔记
- java线程学习笔记
- java 线程 学习笔记
- java线程学习笔记
- java线程学习笔记
- Java线程学习笔记
- java线程学习笔记
- JAVA学习笔记 -- 线程
- JAVA学习笔记 -- 线程
- Java 线程学习笔记
- 学习笔记-java线程
- 【Java学习笔记】线程
- Java学习笔记: 线程
- java线程学习笔记
- java学习笔记-线程
- JAVA线程学习笔记
- Java学习笔记--线程
- Java学习笔记--线程
- Android调试错误集锦
- ConcurrentHashMap
- Qt4中的模块
- opencv学习记录(1)安装与配置
- e-人事管理系统-辞职管理-人员辞职流程
- java 线程 学习笔记
- 做sql性能测试时要注意的小问题
- 面向对象设计原则 及 类和类关系
- python3.3.1 pythonchallenge 通关之level 2
- cocos2d-x自己封装的一个 等待的控件 TTWaitting
- Oracle和SQLserver
- POJ 1276 cash machine
- oracle 表空间管理
- 基于Linux的嵌入式系统全程喂狗策略