多线程基础知识点

########—多线程大纲—############################
1.实现线程方式:【继承Thread类、实现Runnable接口 】
2.静态代理设计模式
3.jdk1.8 lambda表达式
4.线程状态
5.线程优先级
6.守护线程。
7.Thread线程类的常用方法。
8.线程的同步、非同步
9.并发容器。
10.死锁。

########—多线程知识点—##############################
1.实现线程方式:【继承Thread、实现Runnable接口 】
① 继承Thread ,实现run()方法。
Thread使用: MyThread myThread = new MyThread(); myThread.start();
Thread特点:

② 实现Runnable接口,并重写run()方法【常用】
Runnable使用:new Thread(new MyRunnable()).start();
Runnable特点: 方便资源共享 | 避免单继承 |
③ Callable ,并重写call()方法【高级并发juc部分】

2.静态代理设计模式

  • 公共接口:
  • 真实角色:实现公共接口
  • 代理角色:实现公共接口,传入真实角色,根据真实角色调用对于的方法。

3.jdk1.8 lambda表达式

  • 推到:【静态内部类–》局部内部类–》匿名内部类。–》jdk1.8 lambda表达式】
  • 对匿名内部类简化。用于简单的线程体。new Thread(()->{System.out.println(“线程体run方法中的实现体。”)}).start();
    *lambda表达式案例:
    public class Lambda1 {
    public static void main(String[] args) {
    Add add = (a,b)->a+b;
    int a = add.AddTO(10, 23);
    System.out.println(a);
    }
}

interface Add{ public int AddTO(int a,int b);  }

4.线程状态
在这里插入图片描述

*新生状态:Thread thread = new Thread();
*就绪状态:thread.start(); 解除阻塞; yield()【进入就绪状态】; jvm调用到;
*运行状态:获取CPU资源。
*阻塞装态:sleep【 占用资源->时间到家就进入就绪状态 】 ; wait【不占用资源】; join【插队线程,等待其他线程执行完才可以执行自己线程】; read\wait【操作系统去调用】;
*死亡状态:stop;【不推荐】; destroy;【不推荐】; 说明:一般运行完或是外部通过控制使线程停止。

5.线程优先级

  • NORM_PRIORITY 5默认 | MIN_PRIORITY 1 | MAX_PRIORITY 10
  • 获取线程优先级: Thread.currentHread().getPriority();
  • 设置优先级:thread.setPriority(Thread.MIN_PRIORITY);

6.守护线程【】。
*设置线程为守护线程
Thread t = new Thread(new God());
t.setDaemon(true); //设置为守护线程
t.start();

7.Thread线程类的常用方法。

  • Thread.currentThread().isAlive();//是否存活
  • Thread.currentThread():当前线程

8.线程的同步、非同步

扫描二维码关注公众号,回复: 9997767 查看本文章

*使用synchronized来实现并发控制:
同步方法 public syncronizde void method(int ages){…}
同步块:synchronized(obj){…}

  • ① 练习购电影票 ② 练习购火车票

9.并发容器

  • CopyOnWriteArrayList容器里面自带并发同步锁: CopyOnWriteArrayList list = new CopyOnWriteArrayList();

10.死锁

  • 过多的同步,会出现死锁。一般同步中持有多个对象锁。
  • 避免死锁:不要在同一个代码块中,同时持有多个对象的锁。
  • 写一个死锁案例。如:口红和镜子。

11.并发协作,生成者消费者模式。

*管程法【容器】:多线程生成者| 多线程消费者| 缓冲区| 数据【馒头】
*信号灯法【标志符】:
*Java中Object提供了:
wait()【导致当前线程等待,调用notify或notifyAll才会释放】 、wait(long timeOut)【导致当前线程等待一定时间】 、
notify()【】、 notifyAll()【】

12.多线程高级主题

多线程,定时调度:Timer TimerTask


quartz【任务框架】


HappenBefore【指令重排】
—————————————————————————

volatile【用于保证数据的同步,也就是可见性。但不保证原子性,轻量级synchronized 。volatile可以避免指令重排】
————————————————
dcl单列模式【 双重验证+volatile避免指令重排 】
————————————————
ThreadLocal【可以为每个线程分配独立的空间。有get/set/initialVaule 方法】
InheritableThreadLocal【继承上下文环境的数据,找起点】

——————————————————————
可重入锁原理实现【可以延续使用+计算器】
—————————————
CAS【比较并交换 AtomicInteger stock = new AtomicInteger(5); 】

发布了20 篇原创文章 · 获赞 0 · 访问量 1208

猜你喜欢

转载自blog.csdn.net/jinhuding/article/details/104837186
今日推荐