0
点赞
收藏
分享

微信扫一扫

JAVA基础之线程


线程
 程序:保存在物理介质中的代码片断
 进程:程序运行起来 就是一个进程
 线程:程序当中一条独立执行的线索
 
 宏观并行 微观串行

Java是第一款在语言级别支持多线程的编程语言

线程的生命周期(5大)
 
 初生 就绪 运行 消亡

      阻塞

如何创建线程 如何让线程达到新生状态
 1.extends Thread
 2.implements Runnable
如何让线程达到就绪状态
 调用start();
 # 守护线程 (gc)
如何让线程达到运行状态
 程序员无能无力 CPU主导 分配时间片
 运行状态线程执行自己的run()

如何控制线程:

0 setPriority();//设置线程优先级 不推荐使用 因为它依赖操作系统
1 sleep(millis);//让线程从运行状态去到阻塞状态
2 yield();//让当前线程返回就绪状态 [无法保证一定执行其他线程]
3 join();//当前线程邀请调用方法的线程优先执行 在调用方法的线程执行
//结束之前 当前线程不能再次执行

用两种不同的方式 实现两个线程
 线程1:打印1-26
 线程2:打印a-z

 尝试使用学过的控制线程的方式 尽量实现 1 a 2 b 3 c...交替打印

多个线程共享数据的时候 很容易出现并发错误
 独立的线程完全可以自己执行自己的逻辑 不需要考虑其他线程的情况
 一旦涉及到共!享!数据 必须要考虑其他线程的操作完整性
 多个线程共享数据的时候 需要引入Java当中的同步机制

synchronized
 Java采用每一个对象都有一个互斥锁标记 并且结合synchronized
 语法对线程执行代码前进行判断(检查)
 检查是否已经获得synchronized(临界资源)的锁标记
 如果能够得到则正常执行
 如果不能得到 进入这个对象的锁池等待其他线程释放锁标记
 出synchronized代码块 线程自动释放资源
 锁池当中线程 自动回到就绪
 

1。修饰代码块
synchronized(stu){
...//条件是必须先拿到stu锁标记
}
2。修饰方法
public synchronized void add(){ }
等价于
public void add(){
synchronized(this){ }
}
# 单例模式 synchronized其实很简单 就是让当中的代码能够连续执行
synchronized
synchronized(临界资源){

}


 进入这对大括号 必须拿到临界资源的锁标记
 如若拿不到锁标记 进入锁池当中等待
 执行到大括号结束 自动释放锁标记

互斥锁标记/锁旗标/监视器/monitor

修饰代码块
修饰方法

举报

相关推荐

0 条评论