当前位置: 首页 > news >正文

第三百二十节 Java线程教程 - Java线程中断、Java Volatile变量

Java线程教程 - Java线程组

线程总是线程组的成员。

默认情况下,线程的线程组是其创建者线程的组。

Java程序中的线程组由java.lang.ThreadGroup类的一个对象表示。

Thread类中的getThreadGroup()方法返回一个线程的ThreadGroup的引用。

例子

以下代码演示了,默认情况下,新线程是其创建者线程的线程组的成员。

public class Main {public static void main(String[] args) {Thread t1 = Thread.currentThread();ThreadGroup tg1 = t1.getThreadGroup();System.out.println("Current thread"s  name:  " + t1.getName());System.out.println("Current thread"s  group  name:  " + tg1.getName());Thread t2 = new Thread("my  new thread");ThreadGroup tg2 = t2.getThreadGroup();System.out.println("New  thread"s name:  " + t2.getName());System.out.println("New  thread"s  group  name:  " + tg2.getName());}
}

上面的代码生成以下结果。

注意

您还可以创建线程组,并在该线程组中放置一个新线程。

要在你的线程组中放置一个新线程,我们必须使用Thread类的一个构造函数来接受一个ThreadGroup对象作为参数。

以下代码将新线程放置在特定线程组中:

ThreadGroup  myGroup = new ThreadGroup("My Thread  Group");
Thread  t = new Thread(myGroup,  "myThreadName");

线程组以树状结构布置。线程组可以包含另一个线程组。

ThreadGroup类中的getParent()方法返回线程组的父线程组。

顶层线程组的父级为null。

ThreadGroup的activeCount()方法返回组中活动线程数的估计值。

ThreadGroup类的enumerate()方法返回线程组中的线程。

Java线程教程 - Java Volatile变量

关键字volatile可以保持线程的工作内存中的变量值与它们在主存储器中的值同步。

我们可以声明一个变量volatile如下:

volatile boolean flag  = true;

我们可以只声明一个类成员变量,实例或静态字段,作为volatile。

我们可以使用volatile变量作为标志来停止线程。

例子

下面的代码演示了volatile变量的使用。

public class Main extends Thread {private volatile boolean keepRunning = true;public void run() {System.out.println("Thread started");while (keepRunning) {try {System.out.println("Going to sleep");Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("Thread stopped");}public void stopThread() {this.keepRunning = false;}public static void main(String[] args) throws Exception{Main v = new Main();v.start();Thread.sleep(3000);System.out.println("Going to set the stop flag to true");v.stopThread();}
}

上面的代码生成以下结果。


http://www.mrgr.cn/news/71210.html

相关文章:

  • 【JavaWeb】JavaWeb入门之XML详解
  • 【leetcode练习·二叉树】用「分解问题」思维解题 II
  • 微信小程序获取上一页的数据
  • leetcode86:分隔链表
  • 优化Mac的鼠标使用体验超简单方法
  • 丹摩征文活动|Llama3.1:从安装到熟练使用的全方位教程
  • 3349、检测相邻递增子数组 Ⅰ
  • golang如何实现sse
  • 一文熟悉redis安装和字符串基本操作
  • 37 string类关键函数的模拟实现
  • 【网络安全渗透测试零基础入门】之Vulnhub靶场PWNOS: 2.0 多种渗透方法,收藏这一篇就够了!
  • FAS在数据库环境中应用详解
  • 逻辑数据编织平台现代企业数据管理和分析的理想选择
  • SQL面试题——奔驰面试题
  • 创业铁盘论
  • 超级计算机挑战人类智力,谁才是最后赢家?
  • 发社交动态,小心它泄露了你的隐私——不只是地理位置,还有眼神中倒影成像
  • 百度世界2024:AI应用的浪潮时刻
  • Docker--Docker是什么和对Docker的了解
  • 为什么管道符|无法写入txt
  • 【GPTs】Email Responder Pro:高效生成专业回复邮件
  • 局域网桥接只能单向ping问题,arp无法建立
  • 【缓存策略】你知道 Write Through(直写)这个缓存策略吗?
  • 1.vue环境搭建
  • 如何快速查看在 GitHub 上的所有PR提交记录
  • 微信机器人接入聊天模块