方式一:继承Thread
public class MyThread1 extends Thread{ //这是一个线程,它的任务是实现打印0到50
@Override
public void run() {
for(int i=0;i<=50;i++){
System.out.println(i);
}
}
}
定义一个类去继承Thread类,将线程的执行体重写入父类的run()方法,然后在主线程(main函数)中调用子类的start()方法,则线程启动
public class test {
public static void main(String[] args) {
MyThread1 myThread1=new MyThread1(); //定义线程1
MyThread2 myThread2=new MyThread2(); //定义线程2
myThread1.start(); //开启线程1
myThread2.start(); //开启线程2
}
}
这里既继承了父类,又重写父类方法,又定义子类对象,比较繁杂。因此可以直接使用匿名构造类简化代码(以上两段代码合二为一)
public class test {
public static void main(String[] args) {
//线程1部分
new Thread(){ //打印0到50
//重写run()方法,设置线程1的任务。
@override
public void run(){
for(int i=0;i<=50;i++){
System.out.println(i);
}
}
}.start();
//线程2部分
new Thread(){ //打印100到150
//重写run()方法,设置线程1的任务。
@override
public void run(){
for(int i=100;i<=150;i++){
System.out.println(i);
}
}
}.start();
//线程3部分 .......
}
}
方式二:实现Runable接口
public class MyRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i < 20; i++) {
//输出线程名字二十次
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
}
定义一个类实现Runable接口,将线程的执行体重写入run()方法。
public class Demo {
public static void main(String[] args) {
//创建自定义类对象 线程任务对象
MyRunnable mr = new MyRunnable();
//创建线程对象,并将线程命名为线程一号
Thread t = new Thread(mr, "线程一号");
t.start();
for (int i = 0; i < 20; i++) { //这是主线程的任务
System.out.println("线程二号 " + i);
}
}
}
同样可以使用匿名内部类简化代码书写
public class NoNameInnerClassThread {
public static void main(String[] args) {
Runnable r = new Runnable(){
public void run(){
for (int i = 0; i < 20; i++) {
System.out.println("线程一号:"+i);
}
}
};
new Thread(r).start();
}
}
还可以更简单:
public class NoNameInnerClassThread {
public static void main(String[] args) {
new Thread(new Runnable(){
public void run(){
for (int i = 0; i < 20; i++) {
System.out.println("线程一号:"+i);
}
}
}).start();
}
}