多线程总结

继承Thread类

重写run方法

实现Runnable接口

重写run方法

模拟龟兔赛跑

实现Callable接口

重写Callable方法,需要定义一个返回值

静态代理模式

lambda表达式   任何一个接口包含一个抽象方法,它就是函数式接口,可以用lambda表达式简化内部代码,创建该接口的对象

new Thread( () -> System.out.printlin("……") ).start();

线程停止  

 

线程休眠Thread.sleep() 让线程延迟

线程礼让Thread.vield() 让别的线程先执行,但是不一定成功

线程插队(强制执行)Thread.join() 强制执行这个线程

Thread.State  线程状态观测

  • 线程状态。 线程可以处于以下状态之一:
    • NEW
      尚未启动的线程处于此状态。
    • RUNNABLE
      在Java虚拟机中执行的线程处于此状态。
    • BLOCKED
      被阻塞等待监视器锁定的线程处于此状态。
    • WAITING
      正在等待另一个线程执行特定动作的线程处于此状态。
    • TIMED_WAITING
      正在等待另一个线程执行动作达到指定等待时间的线程处于此状态。
    • TERMINATED
      已退出的线程处于此状态。

    一个线程可以在给定时间点处于一个状态。 这些状态是不反映任何操作系统线程状态的虚拟机状态。

getPriority()/setPriority(int xxx) 获取/改变线程的优先级,范围1-10

  

守护线程 thread.setdaemon(true/false)默认是false表示是用户线程,正常的线程都是用户线程 

线程同步 synchronized   同步方法public synchronized void method(int args){}

同步块synchronized(Obj——>增删改查的对象){}

三大不安全案例

1、买票

2、银行取钱问题

 3、不安全线程

死锁

多个线程各自占有一些共享资源﹐并且互相等待其他线程占有的资源才能运行﹐而导致两个或者多个线程都在等待对方释放资源﹐都停止执行的情形﹒某一个同步块同时拥有“两个以上对象的锁”时﹐就可能会发生“死锁”的问题

死锁现象:

解决方法:将代码块拿出来,不同时用一把锁 

  

lock锁 private final Reentrantlock lock = new Reentrantlock();

用lock.lock();方法加锁。lock.unlock();方法解锁

lock.lock();

try{ //保证线程安全的代码}

finally{ lock.unlock();//如果代码有异常,将unlock()写入finally语句块}

生产者消费者问题:管程法

 信号灯法

 线程池

背景:        经常创建和销毁、使用量特别大的资源,比如并发情况下的线程,对性能影响很大。
思路:        提前创建好多个线程,放入线程池中,使用时直接获取,使用完放回池中。可以避免频繁创建销毁、实现重复利用。类似生活中的公共交通工具。
好处:
        提高响应速度(减少了创建新线程的时间)
        降低资源消耗(重复利用线程池中线程,不需要每次都创建)便于线程管理(....)
        corePoolSize:核心池的大小maximumPoolSize:最大线程数
        keepAliveTime:线程没有任务时最多保持多长时间后会终止

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值