1. 程式人生 > >Java線程和Java修飾詞

Java線程和Java修飾詞

文件頭 com ati soc 部分 設計 tor transient edt

META標簽

用來描述一個HTML網頁文檔的屬性。

含義:元素可提供相關頁面的元信息。

<meta> 元素可提供有關頁面的元信息(meta-information),比如針對搜索引擎和更新頻度的描述和關鍵詞。

<meta> 標簽位於文檔的頭部,不包含任何內容。<meta> 標簽的屬性定義了與文檔相關聯的名稱/值對。

meta是html語言head區的一個輔助性標簽。幾乎所有的網頁裏,我們可以看到類似下面這段的html代碼:

<head>

<meta http-equiv="content-Type" content="text/html; charset=gb2312" />

</head>

1.屬性:

name屬性主要用於描述網頁,與之對應的屬性值為content,content中的內容主要是便於 搜索引擎機器人查找信息和分類信息用的。

meta標簽的name屬性語法格式是:參數"content="具體的參數值">;。

其中name屬性主要有以下幾種參數:

A、Keywords(關鍵字)

說明:keywords用來告訴搜索引擎你網頁的關鍵字是什麽。

舉例:

B、description(網站內容描述)

說明:description用來告訴搜索引擎你的網站主要內容。

網站內容描述(description)的設計要點:

①網頁描述為自然語言而不是羅列關鍵詞(與keywords設計正好相反);

②盡可能準確地描述網頁的核心內容,通常為網頁內容的摘要信息,也就是希望搜索引擎在檢索結果中展示的摘要信息;

③網頁描述中含有有效關鍵詞;

④網頁描述內容與網頁標題內容有高度相關性;

⑤網頁描述內容與網頁主體內容有高度相關性;

⑥網頁描述的文字不必太多,一般不超過搜索引擎檢索結果摘要信息的最多字數(通常在100中文字之內,不同搜索引擎略有差異)。

舉例:<meta name="description" content="This page is about the meaning of science,education,culture.">

C、robots(機器人向導)

說明:robots用來告訴搜索機器人哪些頁面需要索引,哪些頁面不需要索引。

content的參數有all,none,index,noindex,follow,nofollow。默認是all。

舉例:<meta name="robots" content="none">

D、author(作者)

說明:標註網頁的作者

http-equiv顧名思義,相當於http的文件頭作用,它可以向瀏覽器傳回一些有用的信息,以幫助正確和精確地顯示網頁內容,與之對應的屬性值為content,content中的內容其實就是各個參數的變量值。

meta標簽的http-equiv屬性語法格式是: ;其中http-equiv屬性主要有以下幾種參數:

A、Expires(期限)

說明:可以用於設定網頁的到期時間。一旦網頁過期,必須到服務器上重新傳輸。

用法:<meta http-equiv="expires" content="Fri,12 Jan 2001 18:18:18 GMT">

註意:必須使用GMT的時間格式。

B、Pragma(cache模式)

說明:禁止瀏覽器從本地計算機的緩存中訪問頁面內容。

用法:<meta http-equiv="Pragma" content="no-cache">

註意:這樣設定,訪問者將無法脫機瀏覽。

C、Refresh(刷新)

說明:自動刷新並指向新頁面。

用法:<meta http-equiv="Refresh" content="2;URL">;(註意後面的引號,分別在秒數的前面和網址的後面)

註意:其中的2是指停留2秒鐘後自動刷新到URL網址。

D、Set-Cookie(cookie設定)

說明:如果網頁過期,那麽存盤的cookie將被刪除。

用法:<meta http-equiv="Set-Cookie" content="cookievalue=xxx; expires=Friday,12-Jan-2001 18:18:18 GMT; path=/">

註意:必須使用GMT的時間格式。

E、Window-target(顯示窗口的設定)

說明:強制頁面在當前窗口以獨立頁面顯示。

用法:<meta http-equiv="Window-target" content="_top">

註意:用來防止別人在框架裏調用自己的頁面。

F、content-Type(顯示字符集的設定)

說明:設定頁面使用的字符集。

用法:<meta http-equiv="content-Type" content="text/html; charset=gb2312">

G、content-Language(顯示語言的設定)

用法:<meta http-equiv="Content-Language" content="zh-cn" />

2.功能:

meta標簽的一個很重要的功能就是設置關鍵字,來幫助你的主頁被各大搜索引擎登錄,提高網站的訪問量。

Java中的修飾詞

  



類內部 package內 子類 其他 public 允許 允許 允許 允許
protected    允許        允許         允許       不允許
default 允許 允許 不允許 不允許 private 允許 不允許 不允許 不允許


1、public

使用對象:類、接口、成員

介紹:無論它所處在的包定義在哪,該類(接口、成員)都是可訪問的

2、protected

使用對象:成員

介紹:成員只能在定義它的包中被訪問,如果在其他包中被訪問,則實現這個方法的類

用protected修飾的成員(變量或方法),在類內部可以調用,同一個package下的其他類也可以調用,子類裏也可以調用,其他地方則不可以調用,也就是說在其他

必須是該成員所屬類的子類。

3、default

無修飾詞(默認),表示包訪問權限(friendly, java語言中是沒有friendly這個修飾符的,這樣稱呼應該是來源於c++ ),同一個包內可以訪問,訪問權限是包級訪問權限;

4、private

使用對象:成員

介紹:成員只可以在定義它的類中被訪問

5、abstract

使用對象:類、接口、方法

介紹:類中包括沒有實現的方法,不能被實例化。如果是一個abstract方法,則方法體

為空,該方法的實現在子類中被定義,並且包含一個abstract方法的類必須是一個abstract類

6、final

使用對象:類、方法、字段、變量

介紹:被定義成final的類不允許出現子類,不能被覆蓋(不應用於動態查詢),字段值

不允許被修改。

7、static

使用對象:類、方法、字段、初始化函數

介紹:成名為static的內部類是一個頂級類,它和包含類的成員是不相關的。靜態方法是類方法,是被指向到所屬的類而不是類的實例。

靜態字段是類字段,無論該字段所在的類創建了多少實例,該字段只存在一個實例被指向到所屬的類而不是類的實例。初始化函數是在

裝載類時執行的,而不是在創建實例時執行的。

9、synchronized

使用對象:方法

介紹:對於一個靜態的方法,在執行之前jvm把它所在的類鎖定;對於一個非靜態類的方法,執行前把某個特定對象實例鎖定。

10、volatile

使用對象:字段

介紹:因為異步線程可以訪問字段,所以有些優化操作是一定不能作用在字段上的。

volatile有時可以代替synchronized。

11、transient

使用對象:字段

介紹:字段不是對象持久狀態的一部分,不應該把字段和對象一起串起。

12、strictfp

使用對象:類、方法

介紹:strictfp修飾的類中所有的方法都隱藏了strictfp修飾詞,方法執行的所有浮點

計算遵守:IEEE 754標準,所有取值包括中間的結果都必須表示為float或double類型,而不能利用

由本地平臺浮點格式或硬件提供的額外精度或表示範圍。

 

進程和線程

  

在並發性程序中,有兩個基本的執行單元:進程和線程。

一個進程就是一個獨立的執行環境。進程有著完整的,私有的基本的運行時資源,尤其是每個進程都有自己的內存空間。

進程通常會被看作是程序或者是應用程序的同義詞。然而,用戶看到的應用程序實際上可能是多個相互協作的進程。為了方便進程間通訊,絕大多數的操作系統都支持IPC(Inter Process Communication , 進程間通訊),諸如管道(pipe)和套接字(socket)。 IPC不僅可用於統一系統中進程間的相互通訊,還可以用於不同系統間的進程通訊。

大多數的java虛擬機的實現都是作為一個單獨的進程的。通過使用ProcessBuilder,Java應用程序可以創建額外的進程。多進程的應用程序超出了本節討論的範圍。

線程有時被稱為是輕型的進程。進程和線程都提供了一種運行環境。但是創建一個新的線程比創建一個新的進程需要更少的資源。

線程存在於進程之中——每個進程中至少有一個線程。同一進程的多個線程間共享進程的資源,包括內存和文件。這樣做是出於效率的考慮,但是可能帶來潛在的通信問題。

多線程是Java平臺的一個重要特性。如果我們將進行諸如內存管理和信號處理的線程算上的“系統”線程計算上的話,那麽每一個應用程序至少都有一個線程,

或者是多個線程。但是從應用程序的編程人員的角度來看,我們總是從一個叫做主線程的線程開始。該線程能夠創建其他的線程,這點我們會在下一節中進行討論。

線程對象

每一個線程都是和類Thread的實例相關聯的。在Java中,有兩種基本的使用Thread對象的方式,可用來創建並發性程序。

在應用程序需要發起異步任務的時候,只要生成一個Thread對象即可,這樣可以直接控制線程的創建並對其進行管理。

把應用程序的任務交給執行器(executor),這樣可以將對線程的管理從程序中抽離出來。

第一種方式 繼承Thread 類 第二種方式 實現Runnable 接口

main方法也是由一個線程執行,這個線程叫主線程; main{ m1{}; m2(); m3(); }

使用Runnable接口實現線程的好處 1.解除線程與線程功能的耦合 2.保留類的繼承特性 

public class ThreadDemo { 
        public static void main(String[] args) {
             // 父類的引用指向子類的對象  
            Thread t=new MyThread();  
            Thread t1=new MyThread1();  
             //啟動 線程  
            t.start(); 
            t1.start(); 
        }
}
      //繼承Thread類創建線程
class MyThread extends Thread{ 
      //線程要做的內容
     public void run() {
       for(int i=0;i<100;i++){  
      System.out.println("你是誰?"+i);
     }
   }
}
class MyThread1 extends Thread{
   //線程要做的內容
   public void run() {
     for(int i=0;i<100;i++){
       System.out.println("查水表?"+i);
     }
   }
}

  

public class ThreadDemo2 {
    public static void main(String[] args) { 
        Runnable r1=new MyRunnable1();  
        Runnable r2=new MyRunnable2(); 
        Thread t1=new Thread(r1);  
        Thread t2=new Thread(r2);  
        t1.start();  
        t2.start(); 
    }
}
class MyRunnable1 implements Runnable{
    public void run() {
        for(int i=0;i<10;i++) { 
            System.out.println("你是誰啊?");  
        }
    }
}
class MyRunnable2 implements Runnable{ 
    public void run() {
        for(int i=0;i<10;i++) {   
            System.out.println("開門查水表?");  
        } 
    }
}                        

 

public class ThreadDemo3 { 
  public static void main(String[] args) { 
     ExecutorService es=Executors.newFixedThreadPool(3); 
     Runnable r1=new Runnable(){  
       public void run() { 
          System.out.println("hello!");  
       }   
      }; 
     Runnable r2=new Runnable(){  
       public void run() {  
         System.out.println("helloWorld!");   
       }    
     };  
     Runnable r3=new Runnable(){ 
      public void run() {  
        System.out.println("helloKitty!");       }      };      es.submit(r1);      es.submit(r2);      es.submit(r3);   } }

頻繁的從系統開辟新的線程會比較消耗系統資源,對程序的性能造成影響,我們可以設計出一個線程池,線程run完之後,而是會回到線程池中,

使用jdk5提供的類創建線程池對象 ExecutorService es=Executors.newFixedThreadPool(個數);

Java線程和Java修飾詞