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

java語言

Java并發編程:深入剖析ThreadLocal

時間:2024-09-20 02:01:30 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教程之Java編程基礎12-03

Java語言的編程特點03-18

Java編程學習示例04-03

Java編程語言應用的行業03-18

java面向對象編程講解04-02

深入理解java的反射04-02

Java語言編程基礎知識04-18

Java編程節省內存的方法12-16

Java編程常見問題匯總12-04

主站蜘蛛池模板: 白山市| 中超| 化隆| 永胜县| 德阳市| 南皮县| 临沂市| 共和县| 元氏县| 黑河市| 横峰县| 台北县| 迁安市| 庆城县| 高雄县| 广宗县| 乌兰浩特市| 苍溪县| 镇宁| 伽师县| 四子王旗| 富源县| 裕民县| 玛曲县| 萨嘎县| 康定县| 柳江县| 隆子县| 甘孜县| 威海市| 庆安县| 塘沽区| 奇台县| 邻水| 土默特右旗| 读书| 长武县| 凤冈县| 淮滨县| 穆棱市| 武平县|