Java線程和Java修飾詞
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修飾詞