多线程学习:
1.什么是进程,什么是线程
进程是一个应用程序
线程是一个进程的执行场景/执行单元
一个进程可以启动多个线程
2.对于java程序来说,在DOS命令窗口输入java HelloWorld之后:
先启动JVM,JVM就是一个进程,JVM再启动主线程调用main方法,同时启动一个垃圾回收线程负责看护,回收垃圾。最起码,现在的java程序中有两个线程并发
3.进程和线程的关系
进程可以看成公司
线程是公司的员工
进程A和B的内存独立不共享
线程A与线程B:
在java语言中:
线程A与线程B,堆方法区内存共享
但是栈内存独立,一个线程一个栈
4.单核计算机并不能做到真正的线程并发
切换线程非常快,给人类的感觉就是并发的
5.实现线程并发的两种方法
5.1:
第一种方法
类接触Runnable方法,然后重写run方法
在main方法创建Thread对象,传入类的对象,将其封装成Thread对象,再调用start方法

5.2:
第二种方法:
类继承Thread类,重写run方法,再main方法中创建类的对象,调用start方法

6.Thread的一部分基础方法:
中断线程推荐使用设置blod值的方法,可以保存数据

7.线程调度:
抢占式调度模型:
优先级高的抢占的时间片多,java使用这种
最低优先级:1
默认优先级:5
最高优先级:10
均分式调度模型:
平均分配,每个线程的时间片一样长
java提供的线程调度方法:
实例方法:
void setPriority(int newPriority) 设置线程的优先级
int getPriority()
获取线程优先级
静态方法:
static void yield() 让位方法:暂停当前正在执行的线程对象,并执行其他线程
yield()不是阻塞方法,执行此方法只会让线程从运行态变为就绪态
8.多线程并发的环境下数据的安全
8.1 存在安全问题的条件
多线程并发,有共享数据,关系数据存在修改的行为
8.2 解决
线程排队执行,不能并发,这种机制叫线程同步机制
会牺牲一部分效率
异步编程模型:多线程并发
同步编程模型:线程同步



9.守护线程
守护线程当所有用户线程结束时自动结束,比如立即回收线程

10.计时器
Timer timer=new Timer()
是创建一个计时器对象,传入参数ture表示是守护线程计时器

11.第三种实现线程的方式
实现Callable接口
里面的call方法相当于run方法
可以获取线程返回值
12.wait与notify
wait:使对象上的线程进入无限期等待,并且立即放弃抓住的锁
notify:唤醒正在对象上等待的线程
niotifyall:唤醒对象上等待的所有线程

