一 什么是线程
线程(thread)是一个程序内部的一条执行路径
常用的main方法就是一条单独的执行路径
如果程序中只有一条执行路径 那么这个程序就是单线程的程序
多线程是什么
多线程是指从软件上实现多条执行流程的技术
Thread 类
java是通过java.lang.Thread 类来表示 线程
按照面向对象的思想 Thread类应该提供思想多线程的方式
多线程实现的方法 一 继承thread类
定义一个子类 mythread 继承线程类java.lang.Thread 重写run()方法
创建MyThread 类的对象
调用线程对象那搞的start()方法启动线程(启动后还是执行run方法)
优缺点
优点 编码简单
缺点 线程类已经继承Thread 无法继承其他类 不利于扩展
问题
1 为什么不直接调用run方法 而是调用start方法启动线程
直接调用run方法会当成普通方法 此时还相当于单线程执行
只用调用start方法才是启动一个新的线程
2 把主线程任务凡在子线程之前
这样主线程一直是先跑完的 相当于一个单线程的效果
总结
继承thread类
重写run方法
创建线程对象
调用start方法启动线程
多线程的实现方法二 实现Runnable 接口
定义一个线程任务类 MyRunnable 实现Runnable 接口 重写run方法
创建 MyRunnable 任务对象
把MyRunnable 任务对象交给Thread处理
调用线程对象的start方法启动线程
方式二 优缺点
优点 线程任务类 只是实现接口 可以继续继承类和实现接口 扩展项强
缺点 编程多一层对象包装 如果线程有执行结果是不可以直接返回的
总结
Thread 的常用方法
获取线程名称getName() 设置名称setName() 获取当前线程对象 currentthread()
线程安全
多个线程同时操作同一个共享资源的时候可能会出现业务安全问题 称之为线程安全问题
线程安全问题出现的原因
存在多线程并发
同时访问共享资源
存在修改共享资源
线程同步
线程同步的核心思想
加锁 把共享的资源进行上锁 每次只能有一个线程进入访问完毕后解锁 然后洽谈线程才能进来
同步代码块
作用 把出现线程安全问题的核心代码上锁i
原理 每次只能进入一个线程 执行完毕后自动解锁 其他线程才可以进来执行
关键字 synchronize(同步对象){
操作共享资源的代码(核心代码)
}