Java線程代碼的實現(xiàn)方法
一、線程Java代碼實現(xiàn)
1.繼承Thread
聲明Thread的子類
public class MyThread extends Thread {
public void run(){
System.out.println("MyThread running");
}
}
運行thread子類的方法
MyThread myThread = new MyThread(); myTread.start();
2.創(chuàng)建Thread的匿名子類
Thread thread = new Thread(){
public void run(){
System.out.println("Thread Running");
}
};
thread.start();
3.實現(xiàn)Runnable接口
聲明
public class MyThread implements Runnable {
@override
public void run() {
System.out.println("MyThread is running");
}
}
運行
Thread thread = new Thread(new MyRunnable()); thread.start();
4.創(chuàng)建實現(xiàn)Runnable接口的匿名類
new Thread(new Runnable(){
@override
public void run() {
System.out.println("Thread is running");
}
}).start();
5.線程名字
創(chuàng)建時候可以給線程起名字
Thread thread = new Thread(new MyRunnable(),"name");?獲得名字 Thread thread = new Thread(new MyRunnable(),"name"); System.out.println(thraed.getName());?獲取運行當(dāng)期代碼線程的名字 Thread.currentThread().getName();
二、線程安全性
1.定義
線程會共享進程范圍內(nèi)的資源,同時,每個線程也會有各自的程序計數(shù)器,棧,以及局部變量。在多個線程不完全同步的情況下,多個線程執(zhí)行的順序是不可預(yù)測的,那么不同的執(zhí)行順序就可能帶來極其糟糕的結(jié)果。
如何定義一個類是線程安全的呢?最核心的問題在于正確性,在代碼中無需進行額外的同步或者協(xié)同操作的情況下,無論有多少個線程使用這個類,無論環(huán)境以何種方式調(diào)度多線程,這個類總能表現(xiàn)出正確的行為,我們就成這個類是線程安全的。
2.線程類不安全的實例
1.首先定義Count類,有私有成員count=0;
public class Count {
private long count = 0;
public long getCount() {
return count;
}
public void service() {
count++;
}
}
2.然后在線程中去調(diào)用這個類的service方法
final Count count = new Count();
for (int i = 0; i < 20000; i++) {
Thread thread3 = new Thread(){
@Override
public void run() {
count.service();
if (count.getCount() == 20000) {
System.out.println("ahha");
}
}
};
thread3.start();
}
3.結(jié)果程序卻沒有輸出,說明最后count并沒有達到20000,為什么呢?
因為存在著以下錯誤執(zhí)行的情況:線程2在線程1沒有完成count自增的情況下就讀取了count,導(dǎo)致最后count沒有達到20000。

4.并發(fā)編程中,這種由于不恰當(dāng)?shù)膱?zhí)行順序而顯示了不正確結(jié)果的情況叫做Race Condition(競爭狀態(tài)),這種情況出現(xiàn)的根本原因是count的自增沒有保持原子性。count自增分三步操作,而不是一步到位。
以上這篇Java線程代碼的實現(xiàn)方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
java多線程編程必備volatile與synchronized深入理解
這篇文章主要介紹了java多線程編程必備volatile與synchronized的深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-04-04
java面試題——詳解HashMap和Hashtable 的區(qū)別
本篇文章主要介紹了java中HashMap和Hashtable的區(qū)別,具有一定的參考價值,有需要的可以了解一下。2016-11-11
java之Timer和TimerTask簡單demo(分享)
下面小編就為大家?guī)硪黄猨ava之Timer和TimerTask簡單demo(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12
Spring中的@Autowired注解深入解析與實戰(zhàn)指南
本文介紹了Spring框架中的@Autowired注解,詳細講解了其基本用法、高級用法以及實際應(yīng)用場景,通過@Autowired注解,Spring容器可以自動將依賴的Bean注入到目標(biāo)Bean中,從而簡化代碼并提高可維護性,需要的朋友可以參考下2024-11-11
Java 輕松實現(xiàn)二維數(shù)組與稀疏數(shù)組互轉(zhuǎn)
在某些應(yīng)用場景中需要大量的二維數(shù)組來進行數(shù)據(jù)存儲,但是二維數(shù)組中卻有著大量的無用的位置占據(jù)著內(nèi)存空間,稀疏數(shù)組就是為了優(yōu)化二維數(shù)組,節(jié)省內(nèi)存空間2022-04-04
SpringSecurity頁面授權(quán)與登錄驗證實現(xiàn)(內(nèi)存取值與數(shù)據(jù)庫取值)
Spring Security是一個能夠為基于Spring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架,本文主要介紹了SpringSecurity頁面授權(quán)與登錄驗證實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-06-06

