Java多线程与并发相关

Java多线程与并发

1.创建线程的三种方法

1.1.继承thread  单继承缺点、管理管理问题

1.2.实现runable  管理管理问题

1.3.使用callable和future  可以有返回值和抛异常。使用线程池启动

 

2.Synchronized的线程同步机制,Synchronized是独占锁

      解决问题:多个线程同时操作一个数据时所产生的数据不安全问题,以下为Synchronized的三种使用方法

2.1 通过synchronized修饰方法

        2.1.2在方法命名前加上synchronized关键字,即可。

        2.1.1synchronized都是有个默认锁对象的,被synchronized修饰的方法的锁对象为 this

2.2 同步代码块

获取锁才可以执行,多个块共用一把锁时,只有一个获得锁的线程才可以访问。锁对象为自己定义的lock

2.3 Synchronized的静态方法

       synchronized静态方法中的锁对象为 该类的字节码对象 ClassName.class

3.线程是五中状态

3.1.新建

3.2.就绪

3.3.运行中

3.4.阻塞

3.5.死亡

4.死锁,多线程对公共资源使用时出现冲突

4.1 尽量减少公共资源的引用

4.2 用完马上释放

4.3 减少synchronized的使用,采用副本的方式

4.4 乐观锁

5.线程安全

5.1 线程安全和不安全的类

6.jdk并发包,juc

6.1线程池优点

       6.1.1.重用线程,减少生成,消亡开销

       6.1.2.线程可控

      6.1.3.避免过多的资源竞争

      6.1.4.提供定时执行,定期执行,监控等

6.2 线程池类型

        6.2.1 CachedThreadPool 可缓存线程池:数量可无限大,有空闲可直接用,没有空闲线   程就创建

       6.2.1 FixedThreadPool 定长线程池。默认使用先进先出fifo原则

      6.2.1 SingleThreadExecutor 单线程线程池

     6.2.1 ScheduledThreaPool 调度线程池 通过schedule方法来使用,延迟时间后启动;通 过schedule方法来scheduleAtFixedRate周期执行。(项目中一般使用quartz 成熟的调度框架)

6.3 CountDownLatch倒计时锁

6.4 信号量SemaPhore

使用示例:

Semaphore semaphore = new Semaphore(5);

6.5 循环屏障CyclicBarrier

解决问题:使多个线程到达某个触发点后,整批开始执行

       6.5.1  CyclicBarrier的使用场景,多线程必须同时开始的场景

      

使用示例:

CyclicBarrier cyclicBarrier = new CyclicBarrier(5);

6.6 重入锁

解释:线程获取锁后,运行中内部方法可以再次获取锁

推荐使用synchronized较为简单,synchronized是可重入锁

6.7 Condition线程等待与唤醒

       6.7.1 必须配合重入锁使用

       6.7.2 可按照需要的顺序激活线程

       6.7.3 await,signal,signalAll

使用示例:配个重入锁使用,c1.wait暂停,c1.signal唤醒

6.8 callable 和 Future

       6.8.1 有返回值的线程

       6.8.1 Future 异步

     6.9 juc同步容器

         6.9.1 juc提供保证线程安全并提升效率的并发容器,直接替换使用

        6.9.2hashTable 和ConcurrentHashMap 区别:

        hashTable 直接加synchronized锁, ConcurrentHashMap 是采用“分段锁”,把整体切分成多段,每段加锁,不同的线程操作不同段块

6.10  Atomic为线程安全设计的包,乐观锁

       6.10.1 原子性:一个操作或多个操作要么全都执行且过程不被打断,要么全不执行

       6.10.2 cas 乐观锁,只适合一些小粒度型数值来使用,比如计数器

 

cas (compare And swap)比较与交换

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值