java. util. concurrent 패키지 의 해체

6837 단어 자바병발 하 다
java. util. concurrent 패키지: 1. locks 부분: 명시 적 잠 금 (상호 배척 잠 금 및 스케치 잠 금) 관련 2. atomic 부분: 원자 변수 류 관련, 비 차단 알고리즘 을 구축 하 는 기초 3. executor 부분: 스 레 드 탱크 관련 4. collection 부분: 병발 용기 관련 5. tools 부분: 동기 화 도구 관련, 예 를 들 어 신 호 량, 폐쇄, 울타리 등 기능
1. collection 부분: 1.1 BlockingQueueBlockingQueue 를 인터페이스 로 합 니 다. 이 를 사용 하려 면 하위 클래스 가 필요 합 니 다: Array BlockingQueueDelay QueueLinked BlockingQueueSynchronousQueuePriority BlockingQueueTransfer Queue
   /**
  • 두 개의 독립 된 스 레 드 에서 하나의 Producer 와 하나의 Consumer
  • 를 시작 합 니 다.
  • Producer 는 공 유 된 BlockingQueue 에 문자열 을 주입 하고 Comsumer 는 그 중에서 꺼 냅 니 다
  • @Author mufeng
  • @Date 2019-7-8 11:25*/public class BlockingQueueExample {public static void main(String[] args) {BlockingQueue blockingQueue=new ArrayBlockingQueue(1024);Producer producer=new Producer(blockingQueue);Consumer consumer=new Consumer(blockingQueue);new Thread(producer).start();new Thread(consumer).start();try {Thread.sleep(4000);} catch (InterruptedException e) {e.printStackTrace();}}}class Producer implements Runnable{private BlockingQueue blockingQueue;public Producer(BlockingQueue blockingQueue){br/>this.blockingQueue=blockingQueue;}@Overridepublic void run() {try {blockingQueue.put("1");Thread.sleep(1000);blockingQueue.put("2");Thread.sleep(1000);blockingQueue.put("3");Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}}class Consumer implements Runnable{private BlockingQueue blockingQueue;public Consumer(BlockingQueue blockingQueue){this.blockingQueue=blockingQueue;} @Overridepublic void run() {try {System.out.println(blockingQueue.take());System.out.println(blockingQueue.take());System.out.println(blockingQueue.take());} catch (InterruptedException e) {e.printStackTrace();}}}

  • 2. Tools 부분 2.1 CountDownlatch 사용법
    /**
  • @Author mufeng
  • @Date 2019-7-8 11:54*/public class TestCountDownLatch {public static void main(String[] args) {final CountDownLatch countDownLatch=new CountDownLatch(2);new Thread(){public void run(){System.out.println(Thread.currentThread().getName()+"processing");try {Thread.sleep(3000);System.out.println(Thread.currentThread().getName()+"ended");countDownLatch.countDown();} catch (InterruptedException e) {e.printStackTrace();}}}.start();new Thread(){public void run(){System.out.println(Thread.currentThread().getName()+"processing");try {Thread.sleep(3000);System.out.println(Thread.currentThread().getName()+"ended");countDownLatch.countDown();} catch (InterruptedException e) {e. printStackTrace ();}}. start (); try {System. out. println ("wait success..."); countDownlatch. await ();//await () 방법 을 호출 하 는 스 레 드 가 걸 립 니 다. count 값 이 0 이 될 때 까지 기다 리 고 System. out. println ("2 end");} catch (Exception e) {e. printStackTrace ();}}
  • /**
  • 모든 스 레 드 가 울타리 위치 에 머 물 러 끝 난 후에 야 계속 실행
  • @Author mufeng
  • @Date 2019-7-8 14:10*/public class TestCyclicBarrier {public static void main(String[] args) {int n=4;CyclicBarrier cyclicBarrier=new CyclicBarrier(n);for(int i=0;inew Writer(cyclicBarrier).start();}

  • }class Writer extends Thread{private CyclicBarrier cyclicBarrier;public Writer(CyclicBarrier cyclicBarrier){this.cyclicBarrier=cyclicBarrier;}public void run(){try {System.out.println("writer start");Thread.sleep(5000);System.out.println("writer end");cyclicBarrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}System.out.println("continue...");}}
    /**
  • Semaphore 는 동시에 접근 하 는 라인 개 수 를 제어 할 수 있 으 며, acquire () 를 통 해 허 가 를 받 을 수 있 으 며, 없 으 면 기다 리 고, release () 는 허 가 를 방출 합 니 다.
  • @Author mufeng
  • @ Date 2019 - 7 - 8 14: 32 */public class TestSemaphore {public static void main (String [] args) {int N = 8;//노동자 수 Semaphore semaphore = new Semaphore (5);/기계 수 (int i = 0; inew Worker (i, semaphore). start ();}} 클래스 Worker extends Thread {private int num; private Semaphore; public Worker (int num, Semaphore){this. num = num; this. semaphore = semaphore;} public void run () {try {semaphore. acquire (); System. out. println ("노동자"+ this. num + "occupy a machine..."); Thread. sleep (2000); semaphore. release (); System. out. println ("노동자"+ this. num + "release a machine");} catch (Interrupted Exception e) {e. printStackTrace ();}
  • }
    /**
  • exchanger 는 두 퀘 스 트 사이 에서 대상 을 교환 하 는 울타리 입 니 다. 이 퀘 스 트 들 이 울타리 에 들 어 갔 을 때 각각 대상 을 가지 고 있 습 니 다. 그들 이 떠 났 을 때 대상 이 가지 고 있 던 대상
  • 을 가지 고 있 습 니 다.
  • @Author mufeng
  • @Date 2019-7-8 14:54*/public class TestExchanger {public static void main(String[] args) {ExecutorService executor =Executors.newCachedThreadPool();final Exchanger exchanger=new Exchanger();executor.execute(new Runnable() {br/>@Overridepublic void run() {String data1="li";doExchangeWork(data1,exchanger);}});executor.execute(new Runnable() {br/>@Overridepublic void run() {String data1="zhang";doExchangeWork(data1,exchanger);}});executor.shutdown();}private static void doExchangeWork(String data1,Exchanger exchanger){System.out.println(Thread.currentThread().getName()+"exchange:"+data1);try {String data2 = (String) exchanger.exchange(data1);System.out.println(Thread.currentThread().getName()+"exchange to"+data2);} catch (InterruptedException e) {e.printStackTrace();}}}

  • 3. Executor 네 가지 스 레 드 풀: new Fixed ThreadPool, new Cached ThreadPool, new Single ThreadExecutor, new Scheduled ThreadPool 1. new Fixed ThreadPool 은 고정 스 레 드 수 를 다시 사용 할 수 있 는 스 레 드 풀 을 만들어 공유 합 니 다.×××대기 열 방식 으로 스 레 드 를 실행 합 니 다. 2. new CachedThreadPool 은 캐 시 가능 한 스 레 드 풀 을 만 듭 니 다. 스 레 드 풀 의 길이 가 처리 수 요 를 초과 하면 남 은 스 레 드 3. new Scheduled ThreadPool 을 유연 하 게 회수 하여 정기 적 이 고 주기 적 인 작업 을 수행 할 수 있 습 니 다. 4. new Single ThreadExecutor 는 단일 스 레 드 풀 을 만 듭 니 다. 유일한 작업 스 레 드 로 만 실행 합 니 다.퀘 스 트, 모든 퀘 스 트 가 지 정 된 순서 (FIFO, LIFO, 우선 순위) 에 따라 수행 되도록 보장 합 니 다.
    작업 은 두 가지 로 나 뉜 다. 하 나 는 Runnable 인 터 페 이 스 를 실현 하 는 클래스 이 고 하 나 는 Callable 인 터 페 이 스 를 실현 하 는 클래스 이다. Callable 의 call () 방법 은 ExecutorService 의 submit (Callable task) 방법 으로 만 실행 되 고 Future 로 돌아 갈 수 있다.
    4. lockSynchronized 단점 1. 중단 할 수 없습니다 2. 시간 초과 설정 할 수 없습니다 3. 방법 에 사용 되 는 synchronized 는 문법 사탕 입 니 다.
    lock (), trylock (), try Lock (long time, TimeUnit unit) 과 lock Interruptibly () 는 자 물 쇠 를 가 져 오 는 데 사 용 됩 니 다. unlock () 방법 은 자 물 쇠 를 풀 어 주 는 데 사 용 됩 니 다.
    ReentrantLock 잠 금 재 접속 가능
    5. atomic 스칼라 클래스: AtomicBoolean, AtomicInteger, AtomicLong, AtomicReference 배열 클래스: AtomicIntegerArray, AtomicLongArray, AtomicReferenceArray 업데이트 클래스: AtomicLongFieldUpdater, AtomicIntegerFieldUpdater, AtomicReferenceFieldUpdater 복합 변 경 량 클래스: AtomicMarkableReference, AtomicStampedReference

    좋은 웹페이지 즐겨찾기