Thread 常用方法:

String getName()  返回该线程的名称。

void setName(String name)  改变线程名称,使之与参数 name 相同。

int getPriority() 返回线程的优先级。

void setPriority(int newPriority)   更改线程的优先级。

boolean isDaemon()   测试该线程是否为守护线程。

void setDaemon(boolean on)  将该线程标记为守护线程或用户线程。

static void sleep(long millis)

void interrupt()  中断线程。

static void yield()  暂停当前正在执行的线程对象,并执行其他线程。

void join()  等待该线程终止。

void run()
void start()

从Object类继承来的方法  void notify() void wait()
 
 
可以参考这篇文章:
 
 


* 看源码:Vector,StringBuffer,Hashtable,Collections.synchroinzed(xxx)
* Vector是线程安全的,ArrayList是线程不安全的
* StringBuffer是线程安全的,StringBuilder是线程不安全的
* Hashtable是线程安全的,HashMap是线程不安全的

Java_多线程_锁释放

问:Java多线程运行环境中,在哪些情况下会使对象锁释放?
答:由于等待一个锁的线程只有在获得这把锁之后,才能恢复运行,所以让持有锁的线程在不再需要锁的时候及时释放锁是很重要的。在以下情况下,持有锁的线程会释放锁:
(1)执行完同步代码块,就会释放锁。(synchronized)
(2)在执行同步代码块的过程中,遇到异常而导致线程终止,锁也会被释放。(exception)
(3)在执行同步代码块的过程中,执行了锁所属对象的wait()方法,这个线程会释放锁,进
        入对象的等待池。(wait)

除了以上情况以外,只要持有锁的线程还没有执行完同步代码块,就不会释放锁。
在下面情况下,线程是不会释放锁的:
(1)执行同步代码块的过程中,执行了Thread.sleep()方法,当前线程放弃CPU,开始睡眠,在睡眠中不会释放锁。
(2)在执行同步代码块的过程中,执行了Thread.yield()方法,当前线程放弃CPU,但不会释放锁。
(3)在执行同步代码块的过程中,其他线程执行了当前线程对象的suspend()方法,当前线程被暂停,但不会释放锁。

 
notify()notifyall()wait()方法的详解:https://www.cnblogs.com/moongeek/p/7631447.html

最新文章

  1. shell十三问
  2. 一个UILabel不同部分显示不同颜色
  3. arrhelper::map
  4. oracle 中文乱码---查看和修改客户端字符集
  5. canvas API ,通俗的canvas基础知识(四)
  6. Java [Leetcode 235]Lowest Common Ancestor of a Binary Search Tree
  7. nginx流量带宽等请求状态统计( ngx_req_status)
  8. HTML页面之间跳转与传值(JS代码)
  9. jquery ajax提交及请求
  10. 关于Latex中插入Visio图片文字不显示的问题
  11. 第1次作业:no blog no fun
  12. UE4 创建第三人称角色
  13. Java Collections类
  14. Sql Server 2008日志满的解决办法
  15. HTTP和RFC
  16. vue Baidu Map --- vue百度地图插件
  17. springboot+dubbo提示超时
  18. scrum与第一次teamwork
  19. python_day4
  20. js实现的map方法

热门文章

  1. [HG]走夜路 题解
  2. springboot + mybatis sql日志
  3. 我不熟悉的list
  4. Unity3D_(数据)JsonUtility创建和解析Json
  5. 客户端框架-MVVM
  6. C++入门经典-例5.1-输出变量的指针
  7. Netflix的Ribbon主要负载均衡策略
  8. 牛客 19-5-3 QAQ
  9. 定时刷新指定div层
  10. Kotlin之注释