[零基础学JAVA]Java SE应用部分-24.多线程(02)

简介:
上季内容回顾: 
多线程的两种实现方式: 
· Thread 
· Runnable
 
最终都要求使用Thread类中start()方法启动多线程
本季主要知识点:
线程的控制方法
线程的状态转换
image
所有的线程实际上是同时启动的,只是抢占CPU的资源的顺序不同。
线程名称的设置及取得
image
在线程中所有的操作类都是在一个类 —— Thread类. 
从提供的方法上来看:多线程中提供了getName 和setName则应该可以推断出在Thread类中必然有一个name属性。
image
ThreadDemo01:
image
运行结果:
image
在程序中,我们没有设置Thread-0名称哈,下面我们设置其名称
image
再来验证下效果
image
main线程是由对象进行调用的,所以是由主线程控制
image
从以上题目我们应该知道,我们之前所运行的所有的JAVA程序都是在线程上运行的。 
java 类名称 --> 启动JVM的进程 
里面的main 方法实际上就是一个在JVM进程上划分的线程。 
如果没有为线程设置名字,则线程的默认名字为 Thread-x(x:表示数字,从0开始) 
如果计数是往上增1,则所有对象肯定是共享同一个变量,则此变量肯定是static类型的。
image
看下效果:
image
问题: 
问在JAVA程序中,每一次运行至少启动几个线程呢? 
· 主线程(main) 
· 垃圾收集线程(GC)
刚才设置名字的时候是在Thread类的对象创建完之后在设置名字的,可以在构造方法处设置线程名称: public Thread(Runnable target,String name) ;
image
image
结果出来了
image
线程控制基本方法
image
方法名称以isXxx开头的,一般都是返回boolean类型。
激活线程
image
线程是通过start()方法启动的,在线程启动之前肯定是死的,但是线程启动之后再判断呢?
image
image
image
image
image
此程序更能验证一点 —— 多线程的程序的输出是不固定的,谁先谁后都应该充分考虑到。
设置后台线程
image
Linux下可以很清楚的看见有后台线程。
image
如果不设置后台线程会怎么样,看一下正常启动线程
image
程序进入死循环
image
现在设置程序后台运行
image
我们发现程序运行一段时间后自己跑后台执行了,程序在前台看不见了
image
线程的休眠
image
如果说现在不使用Thread类中提供好的sleep方法,那么如何可以让线程暂时停止运行呢?
image
image
发现程序运行有点快,我们加个for空循环
image
现在可以清楚看见程序在一个个运行了
image
多线程类中提供专门的休眠方法 —— sleep 
public  static void sleep(long millis) --> 休眠毫秒 
          throws InterruptedException --> 抛出了中断异常
image
image
程序达到了相同的效果哈~三个线程同一时间跳出来哈~这就是一个多线程休眠的操作
image
线程的强制运行
image
public  final void join() --> 证明此方法不能被子类覆写 
              throws  InterruptedException
image
image
image
image
我们看一下这个t.txt文件哈~当i值为100时,强制执行Thread-0线程
image
总结 
1、取得当前线程: 
public static Thread currentThread() ; 
2、取得线程的名字: 
public String getName() ; 
3、设置线程的名字: 
public void setName(String name) 
在构造方法上也有支持: 
|-  public Thread(String name) ; 直接在构造方法处设置线程的名字 
|-  public Thread(Runnable target,String name) 
4、JAVA程序启动时至少启动两个线程 
· main:主方法 
· gc:垃圾收集 
5、线程的休眠 
如果不用Thread类中提供的方法,则可以通过空循环的方式完成延迟操作 
public static void sleep(毫秒) throws InterruptedException 
6、线程的强制运行 
public final void join() throws InterrtupedException
#############################################









本文转自redking51CTO博客,原文链接:http://blog.51cto.com/redking/131233 ,如需转载请自行联系原作者
相关文章
|
1天前
|
安全 Java
java多线程(一)(火车售票)
java多线程(一)(火车售票)
|
1天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
1天前
|
设计模式 算法 Java
Java中的设计模式及其应用
【4月更文挑战第18天】本文介绍了Java设计模式的重要性及分类,包括创建型、结构型和行为型模式。创建型模式如单例、工厂方法用于对象创建;结构型模式如适配器、组合关注对象组合;行为型模式如策略、观察者关注对象交互。文中还举例说明了单例模式在配置管理器中的应用,工厂方法在图形编辑器中的使用,以及策略模式在电商折扣计算中的实践。设计模式能提升代码可读性、可维护性和可扩展性,是Java开发者的必备知识。
|
1天前
|
安全 Java API
函数式编程在Java中的应用
【4月更文挑战第18天】本文介绍了函数式编程的核心概念,包括不可变性、纯函数、高阶函数和函数组合,并展示了Java 8如何通过Lambda表达式、Stream API、Optional类和函数式接口支持函数式编程。通过实际应用案例,阐述了函数式编程在集合处理、并发编程和错误处理中的应用。结论指出,函数式编程能提升Java代码的质量和可维护性,随着Java语言的演进,函数式特性将更加丰富。
|
1天前
|
安全 Java 调度
Java并发编程:深入理解线程与锁
【4月更文挑战第18天】本文探讨了Java中的线程和锁机制,包括线程的创建(通过Thread类、Runnable接口或Callable/Future)及其生命周期。Java提供多种锁机制,如`synchronized`关键字、ReentrantLock和ReadWriteLock,以确保并发访问共享资源的安全。此外,文章还介绍了高级并发工具,如Semaphore(控制并发线程数)、CountDownLatch(线程间等待)和CyclicBarrier(同步多个线程)。掌握这些知识对于编写高效、正确的并发程序至关重要。
|
1天前
|
安全 Java 程序员
Java中的多线程并发编程实践
【4月更文挑战第18天】在现代软件开发中,为了提高程序性能和响应速度,经常需要利用多线程技术来实现并发执行。本文将深入探讨Java语言中的多线程机制,包括线程的创建、启动、同步以及线程池的使用等关键技术点。我们将通过具体代码实例,分析多线程编程的优势与挑战,并提出一系列优化策略来确保多线程环境下的程序稳定性和性能。
|
2天前
|
缓存 分布式计算 监控
Java并发编程:深入理解线程池
【4月更文挑战第17天】在Java并发编程中,线程池是一种非常重要的技术,它可以有效地管理和控制线程的执行,提高系统的性能和稳定性。本文将深入探讨Java线程池的工作原理,使用方法以及在实际开发中的应用场景,帮助读者更好地理解和使用Java线程池。
|
1月前
|
安全 Java
深入理解Java并发编程:线程安全与性能优化
【2月更文挑战第22天】在Java并发编程中,线程安全和性能优化是两个重要的主题。本文将深入探讨这两个主题,包括线程安全的基本概念,如何实现线程安全,以及如何在保证线程安全的同时进行性能优化。
15 0
|
17天前
|
安全 Java 容器
Java并发编程:实现高效、线程安全的多线程应用
综上所述,Java并发编程需要注意线程安全、可见性、性能等方面的问题。合理使用线程池、同步机制、并发容器等工具,可以实现高效且线程安全的多线程应用。
14 1
|
27天前
|
安全 Java 开发者
Java并发编程中的线程安全性探究
在Java编程中,线程安全性是一个至关重要的问题,涉及到多线程并发访问共享资源时可能出现的数据竞争和不一致性问题。本文将深入探讨Java并发编程中的线程安全性,介绍常见的线程安全性问题以及解决方法,帮助开发者更好地理解和应对在多线程环境下的挑战。