一、继承Thread类
/*
创建一个线程有两种方式:继承Thread和实现Runnable接口。
*/
class ThreadDemo extends Thread //1.创建Thread类的子类
{
private Thread t;
private String threadName;
public ThreadDemo(String name)
{
threadName = name;
System.out.println("创建线程名称,名称为:"+threadName);
}
public void run() //2.重写Thread类中的run()方法。
{
System.out.println("运行线程" + threadName);
try
{
for (int i = 4;i>0 ;i-- )
{
System.out.println("线程名称为:"+ threadName + "," + i);
System.out.println("线程休息,时间为100s");
Thread.sleep(100);
}
}
catch(InterruptedException e)
{
System.out.println("线程" + threadName + "中断");
}
System.out.print("线程" + threadName + "退出,终止。。。");
}
public void start()
{
System.out.println("启动线程" + threadName);
//避免NPE
if(t==null)
{
t=new Thread(this,threadName);
t.start();
return;
}
this.start();
}
}
public class Demo
{
public static void main(String[] args)
{
ThreadDemo thread1 = new ThreadDemo("线程-1");
thread1.start();
ThreadDemo thread2 = new ThreadDemo("线程-2");
thread2.start();
}
}
二、实现Runnable接口
```import java.util.*;
class T1 implements Runnable//1.实现Runnable接口,实现run()方法。
{
private Thread t;
private String threadName;
T1(String name)
{
threadName = name;
System.out.println("创建线程,名称为" + threadName );
}
public void run()
{
System.out.println("运行线程" + threadName);
try
{
for (int i=4;i>0;i--)
{
System.out.println("线程名称为:" + threadName + "," + i);
System.out.println("线程休息,时间为:100ms");
Thread.sleep(100);
}
}
catch (InterruptedException e)
{
System.out.println("线程" + threadName + "中断。。。");
}
System.out.println("线程" + threadName + "结束,终止。。。");
}
public void start()
{
System.out.println("Starting" + threadName);
if(t==null)
{
t = new Thread(this,threadName);
t.start();
return;
}
this.start();
}
}
public class RunnableDemo
{
public static void main(String[] args)
{
T1 thread1 = new T1("线程-1");
thread1.start();
T1 thread2 = new T1("线程-2");
thread2.start();
}
}