更新時間:2020-07-29 15:27:02 來源:動力節(jié)點(diǎn) 瀏覽2502次
Java允許多線程并發(fā)控制,當(dāng)多個線程同時操作一個可共享的資源變量時(如數(shù)據(jù)的增刪改查),將會導(dǎo)致數(shù)據(jù)不準(zhǔn)確,相互之間產(chǎn)生沖突,因此加入同步鎖以避免在該線程沒有完成操作之前,被其他線程的調(diào)用,從而保證了該變量的唯一性和準(zhǔn)確性。下面和小編一起來看看多線程常見的7種方法吧!
1,繼承Thread
主要掌握:線程的初始化,啟動,中斷的正確處理方式(interrupted)
public?class?Demo1?{
public?static?void?main(String[]?args)?{
MyThread?thread?=?new?MyThread();
thread.start();
}
}
class?MyThread?extends?Thread{
@Override
public?void?run()?{
System.out.println(Thread.currentThread().getName()+":running...");
}
}
2,實(shí)現(xiàn)Runnable
源碼解析,為什么會調(diào)用Runnable的run方法
public?class?Demo2?{
public?static?void?main(String[]?args)?{
MyRunnable?task?=?new?MyRunnable();
new?Thread(task).start();
}
}
class?MyRunnable?implements?Runnable{
@Override
public?void?run()?{
System.out.println(Thread.currentThread().getName()+":running");
}
}
3,匿名內(nèi)部類的方式(線程只創(chuàng)建一次的情況)
有兩種方式
public?class?Demo3?{
public?static?void?main(String[]?args)?{
new?Thread(){
public?void?run()?{
System.out.println("通過匿名內(nèi)部類的方式來創(chuàng)建線程");
};
}.start();
new?Thread(new?Runnable()?{
@Override
public?void?run()?{
System.out.println("通過實(shí)現(xiàn)一個匿名的Runnable子類來實(shí)現(xiàn)");
}
}).start();
}
}
4,帶返回值的線程,實(shí)現(xiàn)Callable接口
實(shí)現(xiàn)call方法
FutureTask對任務(wù)進(jìn)行封裝
5,使用定時器的方式
Timer,TimerTask,執(zhí)行定時任務(wù)
6,使用線程池的方式
通過Executors創(chuàng)建不同的線程池進(jìn)行任務(wù)執(zhí)行
7,Lambda表達(dá)式(函數(shù)式編程)JDK1.8提供的新特
lambda表達(dá)式代碼簡潔,實(shí)現(xiàn)方便,對并發(fā)支持好,性能高
我們通過打印一個集合的數(shù)據(jù)來觀察運(yùn)行結(jié)果,發(fā)現(xiàn)出來的順序是不一致的,說明是多線程方式
以上就是動力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對“Java多線程技術(shù),多線程常見的7種方法”的內(nèi)容進(jìn)行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業(yè)老師隨時為你服務(wù)。
相關(guān)閱讀
初級 202925
初級 203221
初級 202629
初級 203743