c++线程间通信的几种方法_学Java必备的线程基础

本文介绍了Java线程的基础知识,包括线程的状态、启动与终止,重点讲解了线程间的通信方法,如volatile、synchronized关键字,以及等待/通知机制。文章通过实例解释了如何安全地启动和停止线程,以及线程状态的变迁,帮助读者深入理解Java并发编程。

熟悉Java开发的同学都知道,Java天生支持多线程编程的。这篇文章我们主要来学习下Java线程的基础知识,从线程的启动到不同线程间的通信方式,目的是更系统的掌握Java线程基础。
本文的讲解主要从以下几个点展开:

  1. 什么是线程
  2. 线程都有哪几种状态
  3. 线程的启动和终止
  4. 线程间的通信
  5. 利用本文讲解的线程知识,实现一个简单的线程池

如果上面列出的这几个点,你都已经熟练的掌握了,那么可能本文就无法给你带来帮助了。选择性的往下看哦。

ok,开始步入今天的正题

631c672d83930422661bd0d4c6109e6d.png

什么是线程
下面是针对操作系统中进程和线程的概念:

现代操作系统在运行一个程序时,会为其创建一个进程。例如,启动一个Java程序,操作系统就会创建一个Java进程。现代操作系统调度的最小单元是线程,也叫轻量级进程(Light Weight Process),在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行。


那么什么是Java中的线程呢?

Java中的线程

在Java中,“线程”指两件不同的事情:

  1. java.lang.Thread类的一个实例;
  2. 线程的执行;

使用java.lang.Thread类或者java.lang.Runnable接口编写代码来定义、实例化和启动新线程。一个Thread类实例只是一个对象,像Java中的任何其他对象一样,具有变量和方法,生死于堆上。


一个Java应用总是从main()方法开始运行,mian()方法运行在一个线程内,它被称为主线程。一旦创建一个新的线程,就产生一个新的调用栈。

需要注意的是Java中有一个特殊的线程,那就是Daemon线程


Daemon线程是一种支持型线程,因为它主要被用作程序中后台调度以及支持性工作。这意味着,当一个Java虚拟机中不存在非Daemon线程的时候,Java虚拟机将会退出。可以通过调用Thread.setDaemon(true) 线程设置为Daemon线程。Daemon属性需要在启动线程之前设置,不能在启动线程之后设置。

线程的状态

Java线程在整个生命周期中一共分为6中状态,在给定的任一时刻,线程只能处于一种状态。

cf5f2592a04e23b64728f0e7479cd6b9.png

感兴趣的同学,可以动手实践下,利用jstack工具查看运行中的代码的线程信息,这样比只看有用多了,能够更加深入的理解线程的各种状态。

这里提供示例代码如下,同时示例中的代码都已经上传到 github,需要的同学可以从这个地址获取 github

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值