JAVA创建线程

    要想让对象能具有多线程功能,只需要继承java.lang.Thread类或是实现java.lang.Runnable接口。Java的线程是通过java.lang.Thread类来实现的。当生成一个Thread类对象之后,一个新的线程就产生了。通过该实例对象可以启动、终止、挂起线程等。它的构造方法如下:
public Thread(ThreadGroup group,Runnable target,String name);
第一个参数是线程所属的线程组;target是实际执行线程体的目标对象,它必须实现接口Runnable;name是线程名

此外,当某个参数为null时,有下面的几个方法
public Thread();
public Thread(Runnable target);
public Thread(Runnable target,String name);
public Thread(String name);
public Thread(ThreadGroup group,Runnable target);
public Thread(ThreadGroup group,String name);


    
    任何实现接口Runnable的对象都可以作为一个线程的目标对象。Thread类本身也实现了接口Runnable,因此可以通过两种方法实现线程体:
(1)、定义一个线程类,继承Thread类并重写其中的run()方法。这时在初始化这个类的实例时,target可为null,表示由这个实例对象来执行。

class ComputerSum{
    int sum;
    public void setSum(int n){
        sum=n;
    }
    public int getSum(){
        return sum;
    }
}

class People extends Thread{
    int timeLength;
    ComputerSum CS;
    People(String s,int timeLength,ComputerSum sum){
        setName(s);//调用Thread类的setName()
        this.timeLength=timeLength;
        CS=sum;
    }
    
    public void run(){
        for(int i=1;i<=5;i++){
            int m=CS.getSum();
            CS.setSum(m+1);
            System.out.println("我是"+getName()+",和:"+CS.getSum());
        }
        try{
            sleep(timeLength);
        }catch(InterruptedException e){}
    }
}

public class ChildThread{
    public static void main(String args[]){
        People teacher,student;
        ComputerSum sum=new ComputerSum();
        teacher=new People("老师",200,sum);
        student=new People("学生",200,sum);
        teacher.start();
        student.start();
    }
}

 


(2)、提供一个实现接口Runnable的类作为一个线程的目标对象,在初始化一个Thread类或者Thread子类的线程对象时,把目标传给这个线程实例,由该目标对象提供线程体run()。

class A implements Runnable{
    Thread th;
    A(){
         th = new Thread(this, "Demo Thread");
    }
    public void run(){
        System.out.println("class A实现了Runnable接口,并且还可以继承别的类");
    }
}

public class RunnableThread{
    public static void main(String args[]){
        A a= new A();
        a.th.start();
        System.out.println("这是主线程");
        
    }
} 

 

posted @ 2016-08-13 08:07  生成风  阅读(526)  评论(0编辑  收藏  举报