欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

多线程基础知识点

程序员文章站 2022-05-05 23:13:44
...

########—多线程大纲—############################
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.线程的同步、非同步

*使用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); 】

相关标签: java_se