标签:组合 复习 读写 sub new string pack tac 开发
勤奋能够弥补聪明的不足,但聪明无法弥补懒惰的缺陷。
你好,我是梦阳辰!
期待与你相遇!
JUC就是java.util .concurrent工具包的简称,俗称java并发包。
这是一个处理线程的工具包,JDK 1.5开始出现的.
Interface Lock
Lock实现提供比使用synchronized方法和语句可以获得的更广泛的锁定操作。 它们允许更灵活的结构化,可能具有完全不同的属性,并且可以支持多个相关联的对象Condition 。
锁是用于通过多个线程控制对共享资源的访问的工具。 通常,锁提供对共享资源的独占访问:一次只能有一个线程可以获取锁,并且对共享资源的所有访问都要求首先获取锁。 但是,一些锁可能允许并发访问共享资源,如ReadWriteLock的读锁。
 Lock l = ...; 
 l.lock(); 
 try { 
 // access the resource protected by this lock
  } 
 finally {
  l.unlock();
 } 
Lock接口的实现类:Class ReentrantLock可重复锁
  class X {
private final ReentrantLock lock = new ReentrantLock();
// ... public void m() { 
lock.lock(); 
// block until condition holds 
try {
 // ... method body 
} finally {
    lock.unlock() 
}
Lock可以缩小锁的资源范围。
start()线程不会马上启动,只是进入了就绪状态。
等操作系统的调度。
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
class Ticket {//资源类
    private int number = 300;
    private Lock lock= new ReentrantLock();
    public  void saleTicket(){
        lock.lock();
        try {
            if(number>0){
                System.out.println(Thread.currentThread().getName()+"卖出第:"+(number--)+"还剩下:"+number);
            }
        } finally {
            lock.unlock();
        }
    }
}
/*在高内聚低耦合的前提下,  线程  操作  资源类*/
public class SaleTicket {
    public static void main(String[] args) {
        Ticket ticket = new Ticket();
        new Thread(new Runnable (){
            @Override
            public void run() {
                for(int i=1;i<=300;i++){
                    ticket.saleTicket();
                }
            }
        }, "t1").start();
        new Thread(new Runnable (){
            @Override
            public void run() {
               for(int i=1;i<=300;i++){
                    ticket.saleTicket();
                }
            }
        }, "t2").start();
        new Thread(new Runnable (){
            @Override
            public void