最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2015年09月23日 08:58:25   作者:toweryangtao  
這篇文章主要介紹了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)部類:

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同步工具類

/** 
 * 需要啟動多個線程把接口數(shù)據(jù)分批導入目標,要求 
 * 每次執(zhí)行的時候必須保證前一次任務已結(jié)束,處理這個需求的方式有很多種,其實質(zhì)即 
 * 線程間同步問題,正好這兩天我也在關(guān)注線程同步相關(guān)的東東,jdk提供了不少的線程 
 * 同步工具類,CountDownLatch:一個同步輔助類,在完成一組正在其他線程中執(zhí)行的 
 * 操作之前,它允許一個或多個線程一直等待。 
 * 用給定的計數(shù) 初始化 CountDownLatch。由于調(diào)用了 countDown() 方法,所以在當前計數(shù)到達零之前, 
 * await 方法會一直受阻塞。之后,會釋放所有等待的線程,await 的所有后續(xù)調(diào)用都將立即返回。 
 * 這種現(xiàn)象只出現(xiàn)一次——計數(shù)無法被重置(這點很重要哦)。如果需要重置計數(shù),請考慮使用 CyclicBarrier。 
 * 下面是一個簡單的例子來模擬該需求,當然可能因為為了模擬場景,會有一些不合理的地方,這里主要闡述 
 * CountDownLatch同步,關(guān)于CountDownLatch的源碼將在后面來分析,其主要涉及AbstractQueuedSynchronizer 
 * 這個類,他的類容相對比較復雜 
 * **/ 
 
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) + "---" + "已被刪除"); 
  } 
  } 
 } 
 } 
} 

相關(guān)文章

  • Java高級應用之斗地主游戲

    Java高級應用之斗地主游戲

    這篇文章主要為大家詳細介紹了Java高級應用之斗地主游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Sprin中Bean的順序使用及說明

    Sprin中Bean的順序使用及說明

    這篇文章主要介紹了Sprin中Bean的順序使用及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • IDEA搭建dubbo項目的過程及存在的問題

    IDEA搭建dubbo項目的過程及存在的問題

    這篇文章主要介紹了IDEA搭建dubbo項目及存在的問題小結(jié),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Java8新特性之Collectors.joining()實例詳解

    Java8新特性之Collectors.joining()實例詳解

    在項目中我們常常要對list集合的數(shù)據(jù)做一些字符串拼接/處理等相關(guān)操作,下面這篇文章主要給大家介紹了關(guān)于Java8新特性之Collectors.joining()的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • springboot常用語法庫的基本語法

    springboot常用語法庫的基本語法

    FreeMarker 是一款?模板引擎: 即一種基于模板和要改變的數(shù)據(jù), 并用來生成輸出文本(HTML網(wǎng)頁,電子郵件,配置文件,源代碼等)的通用工具,這篇文章主要介紹了springboot常用語法庫的基本語法,需要的朋友可以參考下
    2022-12-12
  • 深入講解SpringBoot Actuator是什么

    深入講解SpringBoot Actuator是什么

    Spring Boot Actuator提供了生產(chǎn)上經(jīng)常用到的功能(如健康檢查,審計,指標收集,HTTP跟蹤等),幫助我們監(jiān)控和管理Spring Boot應用程序。這些功能都可以通過JMX或HTTP端點訪問
    2023-01-01
  • Java防止非法盜鏈的幾種解決方案

    Java防止非法盜鏈的幾種解決方案

    防止別人通過一些技術(shù)手段盜用本站的資源,本文主要介紹了Java防止非法盜鏈的幾種解決方案,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • JAVA內(nèi)存模型和Happens-Before規(guī)則知識點講解

    JAVA內(nèi)存模型和Happens-Before規(guī)則知識點講解

    在本篇文章里小編給大家整理的是一篇關(guān)于JAVA內(nèi)存模型和Happens-Before規(guī)則知識點內(nèi)容,有需要的朋友們跟著學習下。
    2020-11-11
  • Java設計模式之迪米特原則精解

    Java設計模式之迪米特原則精解

    設計模式(Design pattern)代表了最佳的實踐,通常被有經(jīng)驗的面向?qū)ο蟮能浖_發(fā)人員所采用。設計模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。本篇介紹設計模式七大原則之一的迪米特原則
    2022-02-02
  • Java?18?新特性之Web服務器?jwebserver功能

    Java?18?新特性之Web服務器?jwebserver功能

    JEP?408:?Simple?Web?Server,是這次Java?18推出的一個比較獨立的全新功能點。我們可以通過命令行工具來啟動一個提供靜態(tài)資源訪問的迷你Web服務器,本文通過一個構(gòu)建HTML頁面的例子,來嘗試一下jwebserver的功能
    2022-04-04

最新評論

河曲县| 临泉县| 苏尼特左旗| 南和县| 江源县| 华池县| 武城县| 手机| 饶河县| 焦作市| 囊谦县| 上思县| 潍坊市| 双鸭山市| 巴彦淖尔市| 龙南县| 万年县| 西青区| 安龙县| 闻喜县| 武陟县| 漠河县| 攀枝花市| 临泉县| 化州市| 宣化县| 绥宁县| 边坝县| 淅川县| 红桥区| 万荣县| 陵川县| 梓潼县| 龙井市| 武宣县| 娱乐| 句容市| 东乡县| 新安县| 马关县| 塘沽区|