java Thread兩種簡單用法總結

方法一: 用繼承Thread實現

實例:

package threadtest13;
//多線程的寫法2,用兩種情況變換,
//情況1:新建一個對象,兩個線程共享一個對象。另外是新建兩個對象,兩個線程用兩個對象
//情況2:int i=0;拿到run()外面與在run()裏面兩種情況。
//上面4種情況可以排列組合試一下
publicclass Thread13 {

publicstaticvoid main(String args[]){
MyThread myThread =new MyThread();

// MyThread myThread2= new MyThread();//2

Thread t1=new Thread(myThread);
Thread t2=new Thread(myThread);
//Thread t2= new Thread(myThread2); //2
t1.start();
t2.start();
}

}

class MyThread extends Thread {
// int i=0;//1
publicvoid run() {
String name = Thread.currentThread().getName();
String inf=Thread.currentThread().toString();
long idnum = Thread.currentThread().getId();
for(int i=0;i<10;i++){//不管是新建一個對象,還是兩個對象,//2,都是打印20個數據
// for(;i<10;i++){//新建一個對象的時候,打印11個左右的數據 ,新建兩個對象的時候,//2,會打印20個數據。//1
System.out.println("i----------"+i +",thread name=="+ name
+",threadid=="+ idnum+",thread inf=="+inf);
}
}
}

實例:

package com.thread.test;

publicclass ThreadTest extends Thread {
public ThreadTest(String str){//用構造函數控制線程的名字,如果不寫,默認是thread-整數
super(str);
}

@Override
publicvoid run() {
synchronized(this){
for(int i=0;i<10;i++){//控制run的內部這些東西執行的次數,不加這句,run只執行一次。
System.out.println(i+getName());
try {
sleep((long)(Math.random()*1000));
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
//for循環結束
System.out.println("for循環結束"+getName());
}

super.run();
}

/*
* 此方法可添加也可以不填加,start都能夠調用。
* @Override
public synchronized void start() {
// TODO Auto-generated method stub
super.start();
}*/


publicstaticvoid main(String args[]){
new ThreadTest("su").start();
new ThreadTest("zhu").start();

}
}


上面方法兩個線程不能同步。

方法二:用“實現”Runnable方法實現

實例:

代碼

package threadtest12;
//多線程的寫法1
publicclass Thread12 {

publicstaticvoid main(String args[]) {
MyThread myThread =new MyThread();
//myThread.run();
//把這個MyThread包裝稱爲Thread
Thread t1 =new Thread(myThread);
Thread t2=new Thread(myThread);
t1.start();
t2.start();

}

}

class MyThread implements Runnable {

@Override
publicvoid run() {
// TODO Auto-generated method stub
String name = Thread.currentThread().getName();
String inf=Thread.currentThread().toString();
long idnum = Thread.currentThread().getId();
for(int i=0;i<10;i++){
System.out.println("aaaaa----------"+",thread name=="+ name
+",threadid=="+ idnum+",thread inf=="+inf);
}
}

}

兩個共享一個thread對象,併發調用,20條數據

實例:

/*
* 
* 
* 這段代碼用實現接口來做
* 可以讓類extends繼承其他類*/

package com.thread.test1;

publicclass ThreadTest1 implements Runnable{
String threadName;

public ThreadTest1(String str){
threadName=str;
}

@Override
publicvoid run() {
// TODO Auto-generated method stub
for(int i =0;i<10;i++){
System.out.println("執行第"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//System.out.println("執行完第"+i);
}
System.out.println("結束");
}

publicstaticvoid main(String[] args){
/*
* 這段跟下面的作用是一樣的。。。new的ThreadTest1的對象不能調用start方法
* ThreadTest1 threadTest1=new ThreadTest1("h");
Thread thread1=new Thread(threadTest1);
thread1.start();*/

new Thread(new ThreadTest1("su")).start();
}

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章