Java 多线程初探(一) 创建线程

线程是比进程更小的执行单元,一个进程执行的过程中可以产生多个线程。而每个线程都有自己相对对的资源、生命周期。线程之间可以共享代码和数据、实时通信、进行必要的同步操作。一个进程至少有一个线程,那就是系统创建的主线程。

定义线程有两种方式:继承Thread类和实现Runnable接口。

Thread类的构造方法有多个,如下:

  1. Thread()//分配新的 Thread 对象。
  2. Thread(Runnable target)//分配新的 Thread 对象。
  3. Thread(Runnable target, String name)//分配新的 Thread 对象。
  4. Thread(String name)//分配新的 Thread 对象。
  5. Thread(ThreadGroup group, Runnable target)//分配新的 Thread 对象。
  6. Thread(ThreadGroup group, Runnable target, String name)//分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。
  7. Thread(ThreadGroup group, Runnable target, String name, long stackSize)//分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小。
  8. Thread(ThreadGroup group, String name)//分配新的 Thread 对象。

其实实现Runnable接口后还是要用到Thread类的构造方法的。


利用Thread的子类创建线程

要创建一个多线程程序,首先写一个子类继承Thread类,并覆盖其中run方法。run方法中的代码就是这个线程要实现的功能。然后再创建子类对象,最后调用该对象的start()方法启动线程。子类代码如下:

public class myThread extends Thread {
    private static int count=0;
    
    @Override
    public void run() {
        for(int i=0;i<20;i++){
            count+=1;
            System.out.println("count= "+count);
            
            try {
                sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public myThread(String arg0) {
        super(arg0);
    }    
}

启动线程如下:

myThread th=new myThread();
th.start();


利用实现Runnable接口创建线程

Runnable接口只有一个方法run(),所以实现只要实现了该方法,就可以利用Thread类的构造方法 Thread(Runnable target) 或 Thread(Runnable target, String name) 来创建线程。

实现Runnable接口代码如下:

public class myThreadRunable implements Runnable {
    
    private static int count=0;
    private Thread trval; //需要使用Thread类的构造方法,所以此处定义了一个Thread对象
    
    @Override
    public void run() {
        for(int i=0;i<20;i++){
            count+=1;
            System.out.println("My name is "+this.trval.getName()+" count= "+count);
            
            try {
                this.trval.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
    
    public myThreadRunable(){
        this.trval=new Thread(this);
    }
    
    public void start(){
        this.trval.start();
    }
}

启动线程如下:

myThreadRunable th=new myThreadRunable();
th.start();
出处:http://www.zhaiqianfeng.com    
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
原文地址:https://www.cnblogs.com/zhaiqianfeng/p/4617052.html