JAVA-基础语法-多线程基础-守护线程

举报
Photon 发表于 2020/12/15 12:45:13 2020/12/15
【摘要】 JAVA-基础语法-多线程基础-守护线程

守护线程

非守护线程结束完成后,JVM不关心守护线程是否结束,都会 退出虚拟机。

所以守护线程不能持有需要关闭的资源,如文件关闭等。不然会造成文件丢失。

创建守护线程。

Thread t = new MyThread();
t.setDaemon(true);
t.start();


线程同步

多线程模型下,要保证逻辑正确,对共享变量进行读写时,必须保证一组指令以原子方式执行:即某一个线程执行时,其他线程必须等待:

┌───────┐     ┌───────┐
│Thread1│     │Thread2│
└───┬───┘     └───┬───┘
  │             │
  │-- lock --   │
  │ILOAD (100) │
  │IADD         │
  │ISTORE (101) │
  │-- unlock -- │
  │             │-- lock --
  │             │ILOAD (101)
  │             │IADD
  │             │ISTORE (102)
  │             │-- unlock --
  ▼             ▼

通过加锁和解锁的操作,就能保证3条指令总是在一个线程执行期间,不会有其他线程会进入此指令区间。即使在执行期线程被操作系统中断执行,其他线程也会因为无法获得锁导致无法进入此指令区间。只有执行线程将锁释放后,其他线程才有机会获得锁并执行。这种加锁和解锁之间的代码块我们称之为临界区(Critical Section),任何时候临界区最多只有一个线程能执行。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。