一、線程的學(xué)習(xí)
線程就是程序中執(zhí)行單個(gè)任務(wù)的順序的流程。
線程創(chuàng)建的兩種方式:
1、繼承Thread類
publicstaticvoidmain(String[]args)
{
//繼承Thread類覆蓋父類run方法
Threadthread=newThread()
{
@Override
publicvoidrun()
{
while(true)
{
System.out.println(Thread.currentThread()。getName());
}
}
};
thread.start();
}
2、實(shí)現(xiàn)Runnable接口的run方法
publicstaticvoidmain(String[]args)
{
Threadthread=newThread(newRunnable()
{
@Override
publicvoidrun()
{
while(true)
{
System.out.println(Thread.currentThread()。getName());
}
}
});
thread.start();
}
總結(jié):以上是Java實(shí)現(xiàn)多線程的兩種方式:繼承Thread類和Runnable接口,由于Java類的單繼承性,接口又可以實(shí)現(xiàn)多繼承以及使用Runnable接口可以很好地將需要執(zhí)行的任務(wù)代碼與線程類分離,所以推薦使用實(shí)現(xiàn)Runnable接口的方法去實(shí)現(xiàn)多繼承。但不管怎樣最終都需要使用Thread.start()方法來(lái)使線程處于可運(yùn)行狀態(tài)吐舌頭
3、線程中start() 方法與run() 方法的區(qū)別托福答案
1、start()方法
調(diào)用start()方法就是為了告訴系統(tǒng)我這兒有一個(gè)線程已經(jīng)處于可運(yùn)行狀態(tài),并沒有開始運(yùn)行,如果cpu分配了時(shí)間片,那么JVM就會(huì)調(diào)用本線程的run()方法來(lái)運(yùn)行線程;run()方法一旦執(zhí)行結(jié)束,則本線程終止。
2、run()方法
run()方法只是類的一個(gè)普通方法,如果直接調(diào)用run()方法,那么程序中只會(huì)存在一個(gè)主線程,在調(diào)用run()方法以后的代碼,必須等待run()方法執(zhí)行完成后才能執(zhí)行,直接調(diào)用其他普通方法一樣沒有區(qū)別雅思答案
總結(jié):調(diào)用start()方法可以開啟一個(gè)新的線程,并在新的線程中運(yùn)行run()方法;而直接調(diào)用run()方法則不會(huì)開啟新線程,run()方法還是執(zhí)行于主線程中。
4.線程的運(yùn)行結(jié)果
public static void main(String[] args)
{
Thread thread = new Thread(new Runnable()
{
//實(shí)現(xiàn)了Runnable接口的run()方法
@Override
public void run()
{
System.out.println("Runnable:" + Thread.currentThread()。getName());
}
})
{
//繼承了Thread類 并覆蓋了Thread類的run()方法
@Override
public void run()
{
System.out.println("Thread:" + Thread.currentThread()。getName());
}
};
thread.start();
}
總結(jié):Thread的子類覆蓋了父類的run()方法,所以執(zhí)行了子類的run()方法,在子類的run()方法中又沒有調(diào)用傳入的接口實(shí)現(xiàn)類的run()方法。