多线程怎么实现同步?

多线程:  
    好处: 同一时刻可以运行多段代码
    多核处理器 : 拥有多个核心的处理器(单核cpu虽然看起来也是”多线程“,其实是并发,不断切换的执行多个线程,因为cpu执行效率高,速度快,看起来像是在一起运行

程序 : 一块静态代码, QQ.exe  LOL.exe
进程 : 运行程序, 会加载进系统, 会为其分配独立的内存空间
线程 : 动态程序中的运行代码块, 可以有多个

线程的几个方法:
线程名字
Thread类: setName()  getName()
当在main方法中System.out.println(Thread.currentThread().getName());
当前main的线程名称, 所以一般情况下我们称main线程为主线程,其他线程为子线程
一个Java程序运行的话至少会有三个线程 :
1. main(主线程)

2. GC(垃圾回收线程)

3.异常处理线程

-----------------------------------------------
线程休眠sleep : 强制降低线程的执行速度, 我们就让一个线程暂时的休眠一下

-----------------------------------------------
线程优先级Priority : 线程的优先级越高, 越有机会获得CPU的执行权 (1-10  默认是:5)

-----------------------------------------------
线程同步synchronized : 多个线程访问同一资源时, 需要考虑到的问题

事务: T-SQL 事务四个特性        
一致性: 事务前后数据保持一致
原子性: 不可分割 一起成功 一起失败
永久性: 事务提交之后对数据的修改是永久
隔离性: 1个事务在执行时 不允许另一个事务介入

            
 同步 : 同一时间只执行一个事情, 效率低, 但是安全性高
 异步 : 同一时间可以执行多个事情, 效率高, 但是安全性低 默认的多线程是异步的
 当发现用异步的机制去处理共享资源的时候, 会出现问题
 synchronized 同步的关键
 处理同步问题有三种方式:
 1. 同步代码块 (将操作共享资源的代码进行封装,括号内的是同步锁,只要是一个唯一的对象即可,使用this请确保当前类的对象是唯一的)  
     synchronized (this) {
         需要同步的内容
     }
 2. 同步方法(实列同步方法默认同步锁是this,静态同步方法默认同步锁是当前类.class,使用时请注意)
     同步整个方法, 一个时刻只能有1个对象执行该方法, 其他对象都在外面等
     public synchronized void run() { 
     
     }

3.使用ReentrantLock对象(最常用手动开锁,关锁使用更灵活)

ReentrantLock lock=new ReentrantLock(fair参数); //参数为是否公平的(true:分时调度 false:抢占式调度)
try{
    lock.lock(); //上锁
}catch(){

}finally{
    lock.unlock(); //释放锁
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值