线程是比进程更小的执行单元,一个进程执行的过程中可以产生多个线程。而每个线程都有自己相对对的资源、生命周期。线程之间可以共享代码和数据、实时通信、进行必要的同步操作。一个进程至少有一个线程,那就是系统创建的主线程。
定义线程有两种方式:继承Thread类和实现Runnable接口。
Thread类的构造方法有多个,如下:
- Thread()//分配新的 Thread 对象。
- Thread(Runnable target)//分配新的 Thread 对象。
- Thread(Runnable target, String name)//分配新的 Thread 对象。
- Thread(String name)//分配新的 Thread 对象。
- Thread(ThreadGroup group, Runnable target)//分配新的 Thread 对象。
-
Thread(ThreadGroup group, Runnable target, String name)//分配新的 Thread
对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,并作为 group 所引用的线程组的一员。
- Thread(ThreadGroup group, Runnable target, String name, long stackSize)//分配新的 Thread 对象,以便将 target 作为其运行对象,将指定的 name 作为其名称,作为 group 所引用的线程组的一员,并具有指定的堆栈大小。
- 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();