线程与进程
进程是资源分配的最小单位,线程是CPU调度的最小单位
- 线程在进程下行进
- 一个进程可以包含多个线程
- 不同进程间数据很难共享
- 同一进程下不同线程间数据很易共享
线程的创建方式
继承Thread类方式
1.定义一个类继承Thread类,重写run方法,run里面是线程开启后会执行的代码
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("我是继承Thread类方式");
}
}
2.通过调用Thread类中的start方法,开启一个新的线程
注意:直接调用run方法和start的区别?
- 可以直接调用run方法,但是没有启动一个独立的线程;
- 调用start方法会开启一个独立的新线程,并调用run方法;
public static void main(String[] args) {
System.out.println("111111");
MyThread t1 = new MyThread();
t1.start();
System.out.println("22222");
}
结果:可以明显看到,main方法中打印语句执行完才执行的线程t1的run方法,说明是两个不同的线程
实现Runnable接口方式
1.定义一个自定义类,该类实现Runnable接口,并重写run方法
public class MyThread2 implements Runnable{
@Override
public void run() {
System.out.println("我是实现Runnable接口的类。。。");
}
}
2.调用Thread类Thread(Runnable target)
方法,创建Thread类对象
public static void main(String[] args) {
System.out.println("111111");
Thread t2 = new Thread(new MyThread2());
t2.start();
System.out.println("22222");
}
结果:
若该线程一次性使用,还可通过匿名内部类方式
public static void main(String[] args) {
System.out.println("111111");
Thread t3 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("我是匿名内部类方式");
}
});
t3.start();
System.out.println("22222");
}
结果:也是同样的效果