你把PaintThread類定義在paint方法中了。應(yīng)該定義在類中。而且啟動(dòng)線程的方法是start()不是Start()。
創(chuàng)新互聯(lián)公司主營古田網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app開發(fā),古田h5小程序定制開發(fā)搭建,古田網(wǎng)站營銷推廣歡迎古田等地區(qū)企業(yè)咨詢
首先,如果你只是要實(shí)現(xiàn)電子時(shí)鐘,根本就不需要用到多線程。
如果你真的是要使用,就新建一個(gè)類,實(shí)現(xiàn)Runnable接口就是了。
如:
class MyThread1 implements Runnable{
public MyThread(){
}
public void run(){
}
}
使用的時(shí)候,就:
Thread myThread=new Thread(new MyThread());
myThread.start();
如果要畫圖,你就直接把組件通過構(gòu)造方法傳到MyThread中就是了
this.p.setBackground(new Color(r , g ,b)) ;
設(shè)置當(dāng)前運(yùn)行的窗體的背景顏色:this為當(dāng)前運(yùn)行的實(shí)例;p為實(shí)例的容器(就是窗體JPanel);new Color(r , g ,b)是創(chuàng)建一個(gè)顏色的對(duì)象,以RGB格式的.
try { Thread.sleep(10) ; } catch (Exception ex) { }
this.repaint() ;
每10ms刷新一次(重繪)
JAVA中線程開始有start方法,暫停用sleep(time)方法,線程停止用stop方法,線程等待wait方法,java 中沒有線程重啟一說,只能說線程喚醒notifyAll()或是notify方法,前一個(gè)notifyAll()方法是喚醒所有的已休眠或是等待狀態(tài)下的線程。具體的一種參數(shù)請(qǐng)參照J(rèn)DK文檔。
Java中的線程的生命周期大體可分為5種狀態(tài)。如下:
1.新建(NEW):新創(chuàng)建了一個(gè)線程對(duì)象。
2.可運(yùn)行(RUNNABLE):線程對(duì)象創(chuàng)建后,其他線程(比如main線程)調(diào)用了該對(duì)象的start()方法。該狀態(tài)的線程位于可運(yùn)行線程池中,等待被線程調(diào)度選中,獲取cpu 的使用權(quán) 。
3.運(yùn)行(RUNNING):可運(yùn)行狀態(tài)(runnable)的線程獲得了cpu 時(shí)間片(timeslice) ,執(zhí)行程序代碼。
4.阻塞(BLOCKED):阻塞狀態(tài)是指線程因?yàn)槟撤N原因放棄了cpu 使用權(quán),也即讓出了cpu timeslice,暫時(shí)停止運(yùn)行。直到線程進(jìn)入可運(yùn)行(runnable)狀態(tài),才有機(jī)會(huì)再次獲得cpu timeslice 轉(zhuǎn)到運(yùn)行(running)狀態(tài)。阻塞的情況分三種:
(一).等待阻塞:運(yùn)行(running)的線程執(zhí)行o.wait()方法,JVM會(huì)把該線程放入等待隊(duì)列(waitting queue)中。
(二).同步阻塞:運(yùn)行(running)的線程在獲取對(duì)象的同步鎖時(shí),若該同步鎖被別的線程占用,則JVM會(huì)把該線程放入鎖池(lock pool)中。
(三).其他阻塞:運(yùn)行(running)的線程執(zhí)行Thread.sleep(long ms)或t.join()方法,或者發(fā)出了I/O請(qǐng)求時(shí),JVM會(huì)把該線程置為阻塞狀態(tài)。當(dāng)sleep()狀態(tài)超時(shí)、join()等待線程終止或者超時(shí)、或者I/O處理完畢時(shí),線程重新轉(zhuǎn)入可運(yùn)行(runnable)狀態(tài)。
5.死亡(DEAD):線程run()、main() 方法執(zhí)行結(jié)束,或者因異常退出了run()方法,則該線程結(jié)束生命周期。死亡的線程不可再次復(fù)生。