线程是什么
进程运行的程序,有独立的内存
线程作用,完成进程中的单个任务
安装在ROM,运行时加载到RAM
程序运行原理:分时调度(平均分配每个线程占用CPU时间);抢占式调度(优先级高的线程优先使用CPU)
创建线程的2中方式
1、继承Thread实现run 方法,中需要开启线程的地方调用start() 就可以
public class MyThread extends Thread{ public MyThread(String name){ super(name); } @Override public void run() { //TODO 线程中需要执行的逻辑 } }
//第一种创建线程 MyThread myThread = new MyThread("第一种创建线程"); myThread.start();
2、Runnable 实现类对象,传入Thread
public class MThread implements Runnable{ @Override public void run() { //TODO 线程中需要执行的逻辑 } }
//第二种创建线程
Thread mThread = new Thread(new MThread()); mThread.start();
补充:start() 开启线程 jvm 告诉CPU 去执行任务代码
如何保证线程安全
多个线程操作同一个共享数据时,可能出现线程安全问题,为了保证每个线程都能执行原子操作,线程同步机制
三种解决线程安全的方法
同步代码块
synchronized(同步锁){ 需要同步操作的代码 } 注意,一个线程仅有一个同步锁
同步方法
public synchronized void method(){ 可能会产生线程安全问题的代码 }
Lock锁
public void lock() :加同步锁。
public void unlock() :释放同步锁。
线程状态
NEW(新建)
Runnable(可 运行)
Blocked(锁阻 塞)
Teminated(被 终止)
Waiting(无限 等待) wait() notify() 唤醒线程
Timed Waiting(计时 等待) 定时唤醒