线程就是进程中独立运行的子任务。
单任务的特点是排队等待,是同步的,多线程是异步的。
一个进程正在运行时候至少有一个线程在运行。可以调用Thread.currentThread().getId()和Thread.currentThread().getName()来获得当前线程的ID和名称。
实现多线程的两种方式:继承Thread类和实现Runnable 接口。两种方式无本质区别
使用继承Thread类方式创建线程时候,局限性就是不能多继承。(因为Java语言的特点是单根继承)
1.继承Thread类的方式:要重写run()方法,启动线程要用start()方法
start()方法:通知“线程规划器”此线程已经准备就绪,等待调用线程对象的run()方法。
注:执行start()方法的顺序不代表线程的启动的顺序。
public class ThreadTest extends Thread{
public static void main(String[] args) {
ThreadTest t=new ThreadTest();
t.start();
System.out.println("运行结束");
}
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
System.out.println("MyThread");
}
}
出现的结果:
运行结束
MyThread
结果说明:多线程技术的代码运行结果与代码的执行顺序或者调用顺序是无关的。
2.实现Runnable接口:如果想要创建的线程类已经有一个父类了,就不能再使用继承方法了(因为Java不支持多继承),就需要使用实现Runnable接口的方式。
Thread关于Runnable接口的两个构造函数:
Thread(Runnable target)
Thread(Runnable target,String name)
public class Test3 implements Runnable{
public static void main(String[] args) {
Test3 t = new Test3();
Thread thread = new Thread(t);
thread.start();
System.out.println("运行结束");
}
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("运行中");
}
}
运行结果:
运行结束
运行中