zoukankan      html  css  js  c++  java
  • java 线程知识点

    1. 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以启动多个线程。
    2. 进程中的多个线程共享进程的内存。
    3. Java中,每个线程都有一个调用栈。
    4. 创建一个新的线程,就产生一个新的调用栈。
    5. 线程总体分两类:用户线程和守候线程。当所有用户线程执行完毕的时候,JVM自动关闭。但是守候线程却不独立于JVM,守候线程一般是由操作系统或者用户自己创建的。
    6. Thread对象上调用start()方法启动线程。
    7. 线程都可以设置名字,也可以获取线程的名字,连主线程也不例外。
    8. 在没有指定线程名字的情况下,虚拟机总会为线程指定名字,并且主线程的名字总是mian,非主线程的名字不确定。
    9. 对于任何一组启动的线程来说,调度程序不能保证其执行次序,持续时间也无法保证。
    10. 只有一个可运行的线程或死线程才可以被重新启动。
    11. JVM线程调度程序决定实际运行哪个处于可运行状态的线程。
    12. 线程状态总的可分为五大状态:分别是生、死、可运行、运行、等待/阻塞。
    13. 线程的睡眠是通过Thread.sleep()来实现的。使当前线程睡眠至少多少毫。
    14. 线程的让步是通过Thread.yield()来实现的。
    15. 线程优先级为1~10之间的正整数,线程默认优先级是5,通过setPriority(int newPriority)更改线程的优先级。
    16. Thread的非静态方法join()让一个线程B“加入”到另外一个线程A的尾部。
    17. Java中每个对象都有一个内置锁,一个对象只有一个锁。
    18. 只能同步方法,而不能同步变量和类。
    19. 释放锁是指持锁线程退出了synchronized同步方法或代码块。
    20. 线程睡眠时,它所持的任何锁都不会释放。
    21. 线程可以获得多个锁。比如,在一个对象的同步方法里面调用另外一个对象的同步方法,则获取了两个对象的同步锁。
    22. 同步损害并发性,应该尽可能缩小同步范围。同步不但可以同步整个方法,还可以同步方法中一部分代码块。
    23. 调用同一个类中的静态同步方法的线程将彼此阻塞,它们都是锁定在相同的Class对象上。
    24. 静态同步方法和非静态同步方法将永远不会彼此阻塞,因为静态方法锁定在Class对象上,非静态方法锁定在该类的对象上。
    25. 当一个类已经很好的同步以保护它的数据时,这个类就称为“线程安全的”。
    26. 死锁对Java程序来说,是很复杂的,也很难发现问题。当两个线程被阻塞,每个线程在等待另一个线程时就发生死锁。
    27. void notify() 唤醒在此对象监视器上等待的单个线程。void notifyAll()  唤醒在此对象监视器上等待的所有线程。  void wait()  导致当前的线程等待,直到其他线程调用此对象的 notify() 方法或 notifyAll() 方法。
    28. wait()、notify()、notifyAll()都是Object的实例方法。与每个对象具有锁一样,每个对象可以有一个线程列表,他们等待来自该信号(通知)。
    29. 必须从同步环境内调用wait()、notify()、notifyAll()方法。线程不能调用对象上等待或通知的方法,除非它拥有那个对象的锁。
  • 相关阅读:
    CAS配置记录
    线程同步机制
    线程
    异常
    List集合
    数据结构
    泛型+通配符高级使用--受限泛型
    Collection集合+迭代器+foreach循环
    easyui获取日期datebox中的值
    EL表达式与三目运算符
  • 原文地址:https://www.cnblogs.com/eversleeping/p/2375656.html
Copyright © 2011-2022 走看看