通过Runnable接口实现多线程,此接口的定义为:

pulic interface Runnable{
   public void run();
}

因此需要覆写run()方法:

class ThreadA implements Runnable{
    public void run() {
        for(int i=0;i<5;i++) {
            System.out.print(i+Thread.currentThread().getName()+"\t");
        }
        System.out.println();
    }
}

如果是直接继承Thread类实现多线程,那么启动线程时使用start()方法即可,通过Runnable接口还是需要依靠Thread类:

Thread类中提供了Thread(Runnable target)和public Thread(Runnable target,String name)两个构造方法,可以接收Runnable的子类实例对象

public static void main(String[] args) {
        ThreadA task1=new ThreadA();
        ThreadB task2=new ThreadB();
        Thread t1=new Thread(task1);
        Thread t2=new Thread(task2);
        System.out.println(t1.isAlive());//判断线程是否已启动
        t1.setDaemon(true);//t1将在后台运行,保证整个java进程不会消失
        t2.setPriority(Thread.MAX_PRIORITY);//设置线程B的优先级最高,默认优先级是NORM
        t1.start();
        t2.start();
        
        try {
            t2.sleep(5000);//线程休眠5秒钟
            t2.join();//强制执行一次线程2
            System.out.print("强制执行了一次线程2\n");
        }catch(Exception e){
            System.out.println("catch exception!");
        }
        t1.interrupt();//中断线程执行
        //t1.start();
        System.out.println("主方法的优先级"+Thread.currentThread().getPriority());//getpriority方法获取主方法的优先级
    }

补充部分线程操作方法:

两个构造方法,见上

public Thread(String name)//构造方法
public static Thread currentThread()//返回当前线程
public final String getName()//获取线程名称
public final int getPriority()//获取线程名称
public boolean isInterrupted()//判断线程是否中断
public final boolean isAlive()//判断线程是否还在活动