一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - Java編程中靜態(tài)內(nèi)部類與同步類的寫法示例

Java編程中靜態(tài)內(nèi)部類與同步類的寫法示例

2020-01-05 14:57toweryangtao JAVA教程

這篇文章主要介紹了Java編程中靜態(tài)內(nèi)部類與同步類的寫法示例,用于構(gòu)建靜態(tài)對象以及實現(xiàn)線程同步等,需要的朋友可以參考下

java靜態(tài)內(nèi)部類
將某個內(nèi)部類定義為靜態(tài)類,跟將其他類定義為靜態(tài)類的方法基本相同,引用規(guī)則也基本一致。不過其細節(jié)方面仍然有很大的不同。具體來說,主要有如下幾個地方要引起各位程序開發(fā)人員的注意。
    (一)一般情況下,如果一個內(nèi)部類不是被定義成靜態(tài)內(nèi)部類,那么在定義成員變量或者成員方法的時候,是不能夠被定義成靜態(tài)成員變量與靜態(tài)成員方法的。也就是說,在非靜態(tài)內(nèi)部類中不可以聲明靜態(tài)成員。
    (二)一般非靜態(tài)外部類可以隨意訪問其外部類的成員變量以及方法(包括聲明為private的方法),但是如果一個內(nèi)部類被聲明為static,則其在訪問包括自身的外部類會有諸多的限制。靜態(tài)內(nèi)部類不能訪問其外部類的非靜態(tài)成員變量和方法。
    (三)在一個類中創(chuàng)建非靜態(tài)成員內(nèi)部類的時候,有一個強制性的規(guī)定,即內(nèi)部類的實例一定要綁定在外部類的實例中。然后要在一個外部類中定義一個靜態(tài)的內(nèi)部類,不需要利用關(guān)鍵字new來創(chuàng)建內(nèi)部類的實例。即在創(chuàng)建靜態(tài)類內(nèi)部對象時,不需要其外部類的對象。
    java在實現(xiàn)LinkedList時使用了如下內(nèi)部類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class LinkedList<E>
  extends AbstractSequentialList<E>
  implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
  ........
  private static class Entry<E> {
E element;
Entry<E> next;
Entry<E> previous;
Entry(E element, Entry<E> next, Entry<E> previous) {
  this.element = element;
  this.next = next;
  this.previous = previous;
}
  }
  private Entry<E> addBefore(E e, Entry<E> entry) {
Entry<E> newEntry = new Entry<E>(e, entry, entry.previous);
newEntry.previous.next = newEntry;
newEntry.next.previous = newEntry;
size++;
modCount++;
return newEntry;
  }
  ........
}

這里即靜態(tài)內(nèi)部類的典型用法


java同步工具類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/**
 * 需要啟動多個線程把接口數(shù)據(jù)分批導(dǎo)入目標(biāo),要求
 * 每次執(zhí)行的時候必須保證前一次任務(wù)已結(jié)束,處理這個需求的方式有很多種,其實質(zhì)即
 * 線程間同步問題,正好這兩天我也在關(guān)注線程同步相關(guān)的東東,jdk提供了不少的線程
 * 同步工具類,CountDownLatch:一個同步輔助類,在完成一組正在其他線程中執(zhí)行的
 * 操作之前,它允許一個或多個線程一直等待。
 * 用給定的計數(shù) 初始化 CountDownLatch。由于調(diào)用了 countDown() 方法,所以在當(dāng)前計數(shù)到達零之前,
 * await 方法會一直受阻塞。之后,會釋放所有等待的線程,await 的所有后續(xù)調(diào)用都將立即返回。
 * 這種現(xiàn)象只出現(xiàn)一次——計數(shù)無法被重置(這點很重要哦)。如果需要重置計數(shù),請考慮使用 CyclicBarrier。
 * 下面是一個簡單的例子來模擬該需求,當(dāng)然可能因為為了模擬場景,會有一些不合理的地方,這里主要闡述
 * CountDownLatch同步,關(guān)于CountDownLatch的源碼將在后面來分析,其主要涉及AbstractQueuedSynchronizer
 * 這個類,他的類容相對比較復(fù)雜
 * **/
 
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
 
public class Driver {
 static List<Integer> strList = null;
 int k = 0;
 static {
 //模擬數(shù)據(jù)
 strList = new ArrayList<Integer>();
 for (int i = 0; i < 50; i++) {
  strList.add(i);
 }
 }
 
 public static void main(String args[]) {
 boolean isEnd = true;
 //為了驗證正確性,只執(zhí)行20次
 int count=0;
 Driver d = new Driver();
 while (isEnd && strList.size() > 0&&count<20) {
  CountDownLatch startSignal = new CountDownLatch(1);
  final CountDownLatch doneSignal = new CountDownLatch(5);
  for (int i = 0; i < 5; ++i)
  {
  new Thread(d.new Worker(startSignal, doneSignal,i)).start();
  }
  //計數(shù)減1 子線程Worker可以執(zhí)行
  startSignal.countDown();
  try {
  new Thread(new Runnable() {
   Random r = new Random();
   @Override
   public void run() {
   try {
    //主線程阻塞 知道所有子線程將doneSignal清零
    doneSignal.await();
   } catch (InterruptedException e) {
    e.printStackTrace();
   }
   while(strList.size()<=0){
    int pos = r.nextInt(1000);
    strList.clear();
    for (int i = pos; i < pos + 50; i++) {
    strList.add(i);
    }
   }
   }
  }).start();
  isEnd = true;
  } catch (Exception e) {
  e.printStackTrace();
  }
  count++;
 }
 }
 
 class Worker implements Runnable {
 private final CountDownLatch startSignal;
 private final CountDownLatch doneSignal;
 private int i;
 
 Worker(CountDownLatch startSignal, CountDownLatch doneSignal,int i) {
  this.startSignal = startSignal;
  this.doneSignal = doneSignal;
  this.i=i;
  
 }
 
 public void run() {
  try {
  // 等待主線程執(zhí)行countDown
  startSignal.await();
  doWork();
  //計數(shù)減1
  doneSignal.countDown();
  } catch (InterruptedException ex) {
  } // return;
 }
 
 void doWork() {
  synchronized (strList) {
  int start=(i)*(50/5);
  int end=(i+1)*(50/5);
  for (int i = start; i < end; i++) {
   System.out.println(strList.get(i) + "---" + "已被刪除");
  }
  }
 }
 }
}

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: xxxxx大片在线观看 | 四虎影库网址 | 俄罗斯毛片免费大全 | 97色伦图片7778久久 | 日韩成人在线免费视频 | 五月婷婷伊人网 | 华人亚洲欧美精品国产 | 精品国产理论在线观看不卡 | 2021年国内自拍 | 国产中文视频 | 欧美高清在线精品一区二区不卡 | 男同精品视频免费观看网站 | 国产毛片在线观看 | 俺去俺去啦最新官网在线 | 美女的隐私无遮挡撒尿 | b片在线观看 | 亚洲欧美优优色在线影院 | 日本在线一区 | 99自拍视频在线观看 | 麻豆亚洲一区 | 青久草视频 | 美女牲交毛片一级视频 | 91久久99热青草国产 | 亚洲乱亚洲乱妇41p 亚洲乱码一区二区三区国产精品 | 视频一区二区三区欧美日韩 | 免费亚洲视频 | 草久热| 国产码一区二区三区 | 日本在线视频网址 | 国产精品 色| 国产精品麻豆久久99 | 亚洲小视频网站 | 亚洲国产日韩欧美在线vip1区 | 91麻豆国产精品91久久久 | 免费高清www动漫视频播放器 | 男女性潮高片无遮挡禁18 | 99热这里只有精品久久免费 | 免看一级一片一在线看 | 奇米777四色精品综合影院 | 色婷婷在线| 亚洲精品视频久久 |