奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

java語言

Java并發編程:深入剖析ThreadLocal

時間:2025-03-15 23:04:02 java語言 我要投稿
  • 相關推薦

Java并發編程:深入剖析ThreadLocal

  ThreadLocal類可以理解為ThreadLocalVariable(線程局部變量),提供了get與set等訪問接口或方法,這些方法為每個使用該變量的線程都存有一份獨立的副本,因此get總是返回當前執行線程在調用set時設置的最新值。可以將ThreadLocal視為 包含了Map對象,保存了特定于該線程的值。

  概括起來說,對于多線程資源共享的問題,同步機制采用了“以時間換空間”的方式,而ThreadLocal采用了“以空間換時間”的方式。前者僅提供一份變量,讓不同的線程排隊訪問,而后者為每一個線程都提供了一份變量,因此可以同時訪問而互不影響。

  模擬ThreadLocal

  復制代碼 代碼如下:

  import java.util.Collections;

  import java.util.HashMap;

  import java.util.Map;

  public class SimpleThreadLocal{

  private MapvalueMap = Collections

  .synchronizedMap(new HashMap());

  public void set(T newValue) {

  valueMap.put(Thread.currentThread(), newValue); // ①鍵為線程對象,值為本線程的變量副本

  }

  public T get() {

  Thread currentThread = Thread.currentThread();

  T o = valueMap.get(currentThread); // ②返回本線程對應的變量

  if (o == null && !valueMap.containsKey(currentThread)) { // ③如果在Map中不存在,放到Map中保存起來。

  o = initialValue();

  valueMap.put(currentThread, o);

  }

  return o;

  }

  public void remove() {

  valueMap.remove(Thread.currentThread());

  }

  protected T initialValue() {

  return null;

  }

  }

  實用ThreadLocal

  復制代碼 代碼如下:

  class Count {

  private SimpleThreadLocalcount = new SimpleThreadLocal() {

  @Override

  protected Integer initialValue() {

  return 0;

  }

  };

  public Integer increase() {

  count.set(count.get() + 1);

  return count.get();

  }

  }

  class TestThread implements Runnable {

  private Count count;

  public TestThread(Count count) {

  this.count = count;

  }

  @Override

  public void run() {

  // TODO Auto-generated method stub

  for (int i = 1; i <= 3; i++) {

  System.out.println(Thread.currentThread().getName() + "t" + i

  + "tht" + count.increase());

  }

  }

  }

  public class TestThreadLocal {

  public static void main(String[] args) {

  Count count = new Count();

  Thread t1 = new Thread(new TestThread(count));

  Thread t2 = new Thread(new TestThread(count));

  Thread t3 = new Thread(new TestThread(count));

  Thread t4 = new Thread(new TestThread(count));

  t1.start();

  t2.start();

  t3.start();

  t4.start();

  }

  }

  輸出

  復制代碼 代碼如下:

  Thread-0 1th 1

  Thread-0 2th 2

  Thread-0 3th 3

  Thread-3 1th 1

  Thread-1 1th 1

  Thread-1 2th 2

  Thread-2 1th 1

  Thread-1 3th 3

  Thread-3 2th 2

  Thread-3 3th 3

  Thread-2 2th 2

  Thread-2 3th 3

【Java并發編程:深入剖析ThreadLocal】相關文章:

java并發編程參考10-30

簡單地分析Java線程編程中ThreadLocal類的使用08-10

java編程術語11-10

java編程基礎07-26

Java編程語言10-02

Java中同步與并發的運用07-31

java教程之Java編程基礎09-12

Java編程環境的搭建06-03

java編程規范介紹07-10

主站蜘蛛池模板: 拜城县| 深泽县| 吉首市| 合江县| 鞍山市| 郁南县| 正宁县| 马鞍山市| 蒙自县| 乡宁县| 浦城县| 独山县| 台湾省| 广平县| 宁津县| 璧山县| 泸西县| 邢台市| 尉犁县| 葫芦岛市| 广东省| 锦屏县| 德格县| 永宁县| 朝阳区| 张家川| 宁夏| 阿坝县| 洪雅县| 罗甸县| 龙口市| 华容县| 十堰市| 九江市| 将乐县| 桦川县| 乾安县| 富宁县| 苍山县| 翁牛特旗| 多伦县|