继承Thread类:
调用:
/**
* 方法一:
* 继承Thread类创建线程
* @author LiMin
*
*/
public class CreateThread extends Thread {
private String name;
public CreateThread(){
}
public CreateThread(String name){
/*this.name=name;*/
//调用父类的给线程命名的方法
super(name);
}
public void run(){
for(int x =0;x<60;x++){
/*System.out.println(this.name+ " run -----"+ x);*/
/*System.out.println(this.getName()+ " run -----"+ x);*/
//使用Thread的静态方法获取线程名称Thread.currentThread().getName()是标准通用方式
/*System.out.println(Thread.currentThread().getName()+ " run -----"+ x);*/
System.out.println((Thread.currentThread()==this)+"....."+this.getName()+ " run -----"+ x);
}
}
}
调用:
public class ThreadTest {
/**
* @param args
*/
public static void main(String[] args) {
CreateThread t1 = new CreateThread("one----");
CreateThread t2= new CreateThread("two+++++");
t1.start();
t2.start();
for(int x =0;x<60;x++){
System.out.println("main-----"+ x);
}
}
}
public class Ticket2 implements Runnable{ //extends Thread{
//如果是静态的话,所有的线程会共享这100张票
/*private static int ticket =100;*/
//如果不是静态的话,每一个线程对象都会创建这个ticket对象,也即每个线程拥有100张票卖。
//这时候,如果还是采用继承Thread类的方法就不行了,需要使用实现Runnable接口创建线程
private int ticket =1000;
Object obj= new Object();
public void run() {
//在这里声明的对象是无效的
/*Object obj= new Object(); */
while(true){
synchronized (obj) {
if(ticket>0){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+".....sale : "+ ticket--);
}
}
}
}
}
调用:
public class TicketDemo2 {
/**
* @param args
*/
public static void main(String[] args) {
Ticket2 t = new Ticket2();
Thread t1 = new Thread(t);
Thread t2 = new Thread(t);
Thread t3 = new Thread(t);
Thread t4 = new Thread(t);
t1.start();
t2.start();
t3.start();
t4.start();
}
}