勤奋能够弥补聪明的不足,但聪明无法弥补懒惰的缺陷。
你好,我是梦阳辰!
期待与你相遇!
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 (){