java 线程知识点总结

java 线程知识点总结,第1张

程序、进程、线程:

程序:是指含有指令和数据的文件,被存储在磁盘或其他的数据设备中,也就是说程序是静态的代码;

进程:是程序的一次执行过程,是代码在数据集合上的一次运行活动,是系统资源分配和调度的基本单位;

线程:是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源;

线程的创建:
  1. 继承Thread创建线程:
    1. 扩展 Thread类,

      重写父类的run()方法,规定线程的具体 *** 作

      创建扩展类的对象,调用start()启动线程

  2.      实现Runnable接口创建线程:
    1.   创建实现Runnable接口类,实现run()方法

      使用实现类的对象作为目标对象,创建Thread对象

      调用start()启动线程       

  3.  使用Callable和Future创建线程(了解)
    1. 创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,且该call()方法有返回值,再创建Callable实现类的对象

      使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值

      使用FutureTask对象作为Thread对象的目标对象创建并启动新线程

      调用FutureTask对象的get()方法来获得子线程执行结束后的返回值

  4. 通过实现接口和继承类两种方式创建对象的比较:

    采用实现 Runnable、Callable 接口的方式创建多线程时,线程类只是实现了 Runnable 接口或 Callable 接口,还可以继承其他类。还便于目标对象的共享

    使用继承 Thread 类的方式创建多线程时,编写简单,如果需要访问当前线程,则无需使用 Thread.currentThread() 方法,直接使用 this 即可获得当前线程。不能再继承其他类

线程的生命周期:

 这个图讲的很详细:

  • yield()让出一次执行机会,使线程从运行状态转到可运行状态
  • join()等待这个线程结束;也就是,t.join()方法阻塞调用此方法的线程,直到线程t完成,此线程再继续;通常用于在main()主线程内,等待其它线程完成再结束main()主线程
  •  
  • sleep方法:
  •             

 

线程的同步:
  1. volatile关键字:

    简单,保证数据的可见性。就是一个线程在对主内存的某一份数据进行更改时,改完之后会立刻刷新到主内存。并且会强制让缓存了该变量的线程中的数据清空,必须从主内存重新读取最新数据。

    1. ​​​​​​​

       
  2. synchronized关键字:对对象自动上锁

    同步普通方法(实例方法)上锁,锁是当前实例对象 ,进入方法前要获得当前实例的锁,方法执行完释放。

    同步静态方法,锁是当前类的class对象 ,进入方法前前要获得当前类对象的锁,方法执行完释放。

    同步代码块,要指定锁的对象,是可以是实例对象,也可以是类对象,进入同步代码块前要获得给定对象的锁,代码块执行完释放
    1. ​​​​​​​
  3. Lock接口和 ReentrantLock类:需要 显示的获得、释放锁。实现同步更灵活

       常用方法:lock()获取锁;及unLock()释放锁

    1. ​​​​​​​​​​​​​​

       

  4. wait():的作用是让当前线程进入等待状态,同时,wait()也会让当前线程释放它所持有的锁。直到其他线程调用此对象的 notify() 方法或  notifyAll() 方法,当前线程被唤醒(进入“就绪状态”)

    notify()和notifyAll()的作用,则是唤醒当前对象上的等待线程;notify()是唤醒单个线程,而notifyAll()是唤醒所有的线程

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/719610.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-25
下一篇 2022-04-25

发表评论

登录后才能评论

评论列表(0条)