用Java多線程在mail中創(chuàng)建Thread對象的介紹
Java多線程有很多的知識需要我們學(xué)習(xí),在學(xué)習(xí)的時(shí)候還是需要我們靠近實(shí)踐。下面我們就來詳細(xì)的看看有關(guān)Java多線程的使用情況。我們接著修改ThreadDemo1,在main方法中創(chuàng)建四個(gè)Thread對象:
- public class ThreadDemo1{
- public static void main(String[] args){
- new ThreadTest().start();
- new ThreadTest().start();
- new ThreadTest().start();
- new ThreadTest().start();
- }
- }
- class ThreadTest extends Thread{
- private int ticket = 100;
- public void run(){
- while(true){
- if(ticket > 0){
- System.out.println(Thread.currentThread().getName() +
- ” is saling ticket” + ticket–);
- }else{
- break;
- }
- }
- }
- }
這下達(dá)到目的了嗎?
從結(jié)果上看每個(gè)票號都被打印了四次,即四個(gè)線程各自賣各自的100張票,而不去賣共同的100張票。這種情況是怎么造成的呢?我們需要的是,多個(gè)線程去處理同一個(gè)資源,一個(gè)資源只能對應(yīng)一個(gè)對象,在上面的程序中,我們創(chuàng)建了四個(gè)ThreadTest對象,就等于創(chuàng)建了四個(gè)資源,每個(gè)資源都有100張票,每個(gè)線程都在獨(dú)自處理各自的資源。
經(jīng)過這些實(shí)驗(yàn)和分析,可以總結(jié)出,要實(shí)現(xiàn)這個(gè)鐵路售票程序,我們只能創(chuàng)建一個(gè)資源對象,但要?jiǎng)?chuàng)建多個(gè)線程去處理同一個(gè)資源對象,并且每個(gè)線程上所運(yùn)行的是相同的程序代碼。在回顧一下使用接口編寫Java多線程的過程。
- public class ThreadDemo1{
- public static void main(String[] args){
- ThreadTest t = new ThreadTest();
- new Thread(t).start();
- new Thread(t).start();
- new Thread(t).start();
- new Thread(t).start();
- }
- }
- class ThreadTest implements Runnable{
- private int tickets = 100;
- public void run(){
- while(true){
- if(tickets > 0){
- System.out.println(Thread.currentThread().getName() +
- ” is saling ticket ” + tickets–);
- }
- }
- }
- }
上面的程序中,創(chuàng)建了Java多線程,每個(gè)線程調(diào)用的是同一個(gè)ThreadTest對象中的run()方法,訪問的是同一個(gè)對象中的變量(tickets)的實(shí)例,這個(gè)程序滿足了我們的需求。在Windows上可以啟動多個(gè)記事本程序一樣,也就是多個(gè)進(jìn)程使用同一個(gè)記事本程序代碼。
【編輯推薦】