程序:为了完成某种目的用某种语言完成的一组指令集合(静态代码),安装到硬盘上
进程:运行时的程序,是操作系统分配的最小单位
线程:线程是进程的最小执行单元,是操作系统进行任务调度的最小单元
主线程负责启动程序(类似于java中的main方法,启动Java主线程)
一个进程可以包含多个线程,线程不能脱离进程而存在
一个进程中的所有线程共享一个进程中的资源
一个线程只能属于一个进程
创建线程
继承Thread类的方式
定义:
public class MyThread extends Thread {
public void run() {
}
}
调用:
MyThread thread = new MyThread();
thread.start();
实现Runnable接口的方式
java.lang.Runnable接口中仅仅只有一个抽象方法:
public void
run()
也可以通过实现Runnable接口的方式来实现线程,只需要实现其中的run方法即可;
Runnable接口的存在主要是为了解决Java中不允许多继承的问题。
定义:
public class MyThread implements Runnable{
@Override
public void run() {
……
}
}
线程执行任务
MyThread r = new MyThread();
创建一个线程作为外壳,将r包起来,
Thread thread = new Thread(r);
thread.start();
继承方式和实现方式的联系与区别
【区别】
继承Thread: 线程代码存放Thread子类run方法中。
实现Runnable:线程代码存在接口的子类的run方法。
【实现Runnable的好处】
1)避免了单继承的局限性
2)多个线程可以共享同一个接口实现类的对象,非常适合多个相同线程来处
理同一份资源。
线程在它的生命周期中有不同的状态:

1.新建2.就绪3.阻塞4.运行5.死亡
多线程
在一个进程中同时有多个线程,java语言中支持多线程
优点:提高程序处理速度,提高cpu利用率
缺点:多个线程对一个共享资源进行访问
问:如何解决多线程访问共享资源?
答:
1.使用synchronized关键字
2.使用lock接口的实验类
1.使用synchronized关键字
修饰方法:
非静态方法:锁对象默认是this
静态方法:锁标志对象是类的class对象,只要是一个类的对象,那么他们的Class对象是相同的
修饰代码块:
只对某段代码块进行加锁,需要自己传入一个锁对象,要求锁对象必须是唯一的。
实现是依赖底层的指令来控制,是隐式的,自动的添加,自动式方法
2.使用Lock接口下的实现类
是java代码层面的控制,只能对某段代码进行加锁和控制
lock()
unlock()
只能手动添加,手动上方法