[零基础学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线程:深入理解与实战应用
11 0
|
1天前
|
Java
Java中的并发编程:理解和应用线程池
【4月更文挑战第23天】在现代的Java应用程序中,性能和资源的有效利用已经成为了一个重要的考量因素。并发编程是提高应用程序性能的关键手段之一,而线程池则是实现高效并发的重要工具。本文将深入探讨Java中的线程池,包括其基本原理、优势、以及如何在实际开发中有效地使用线程池。我们将通过实例和代码片段,帮助读者理解线程池的概念,并学习如何在Java应用中合理地使用线程池。
|
2天前
|
Java
并发编程之线程池的应用以及一些小细节的详细解析
并发编程之线程池的应用以及一些小细节的详细解析
16 0
|
5天前
|
安全 Java
深入理解 Java 多线程和并发工具类
【4月更文挑战第19天】本文探讨了Java多线程和并发工具类在实现高性能应用程序中的关键作用。通过继承`Thread`或实现`Runnable`创建线程,利用`Executors`管理线程池,以及使用`Semaphore`、`CountDownLatch`和`CyclicBarrier`进行线程同步。保证线程安全、实现线程协作和性能调优(如设置线程池大小、避免不必要同步)是重要环节。理解并恰当运用这些工具能提升程序效率和可靠性。
|
6天前
|
安全 Java
java多线程(一)(火车售票)
java多线程(一)(火车售票)
|
15天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
26天前
|
存储 缓存 NoSQL
Redis单线程已经很快了6.0引入多线程
Redis单线程已经很快了6.0引入多线程
31 3
|
29天前
|
消息中间件 安全 Linux
线程同步与IPC:单进程多线程环境下的选择与权衡
线程同步与IPC:单进程多线程环境下的选择与权衡
58 0
|
1月前
|
Java 调度 C#
C#学习系列相关之多线程(一)----常用多线程方法总结
C#学习系列相关之多线程(一)----常用多线程方法总结
|
1月前
|
安全 编译器 C#
C#学习相关系列之多线程---lock线程锁的用法
C#学习相关系列之多线程---lock线程锁的用法

热门文章

最新文章