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

相关文章:

  • 2021-10-02
  • 2021-06-27
  • 2021-09-25
  • 2022-01-18
  • 2021-07-08
  • 2021-06-19
  • 2021-10-23
  • 2022-01-07
猜你喜欢
  • 2021-10-24
  • 2021-12-25
  • 2021-05-25
  • 2021-12-01
  • 2022-01-08
  • 2021-06-03
  • 2021-06-09
相关资源
相似解决方案