J2SE知识点摘记(九)
1、 线程操作的一些方法
方法名称 方法说明
public static int activeCount() 返回线程组中目前活动的线程的数目
public static native Thread currentThread() 返回目前正在执行的线程
public void destroy() 销毁线程
public static boolean interrupted() 判断目前线程是否被中断
public final native boolean isAlive() 判断线程是否在活动
public void run() 执行线程
public final void setName() 设定线程名称
public native synchronized void start() 开始执行线程
public String toString() 返回代表线程的字符串]
public static native void yield() 将目前正在执行的线程暂停,允许其他线程执行
分别调用了printMsg()方法,一个从多线程run()方法中调用,一个是从main()方法中调用.
main()方法也是一个线程,实际上在命令行中运行java命令时,就启动了一个jvm的进程,默认情况此进程会产生两个线程:一个是是main()方法线程,另外一个就是垃圾回收(GC)线程.
在"t1.start();"前面可以设置线程的名称,"t1.setName("test thread");".
2、 判断线程是否启动
调用start()方法前,t1.isAlive()=false
刚调用start()方法时,t1.isAlive()=true
main()方法快结束时调用isAlive]()方法,此时的状态不再固定,有可能是true,有可能是false.
3、 后台线程与setDaemon()方法
如果某个线程对象在启动(调用start()方法)之前调用了setDaemon(true)方法,这个线程就变成了后台线程.
因为它是后台线程,因此整个进程在在主线程结束时就随之终止进行了.这验证了进程中只有后台线程进行时,进程就会结束的说法.
4、 线程的强制进行
5、 本程序启动了两个线程,一个是main()线程,一个是pp线程.调用join()方法之后,只有pp的线程对象在在运行,也就是说join()方法是用来强制某一线程的运行.
由上可见,pp线程中的代码被并入到了main()线程中,也就是pp线程中的代码不执行完,main线程中的代码就只能一直等待.除了无参数的join方法外,还有两个带参数的join方法,分别是join(long millis)和join(long millis,int nanos),他们的作用是指定合并时间,前者精确到毫秒,后者精确到纳秒,意思是两个线程合并指定的时间后,又开始分离,回到合并前的状态.
6、 线程的休眠
线程的休眠主要是让出CPU给别的线程.必须通过try{...}catch(...){...}方法.
因为每次运行时都需要先休眠一会儿.由于使用sleep()方法会抛出一个InterruptedExcepion,所以在程序中需要用try...catch()捕获.(捕获之后什么也没做)
7、 关于什么时候直接调用"ThreatTest t=new ThreatTest()"再使用 "t.start()",什么时候先使用"ThreatTest t=new ThreatTest()","Thread pp=new Threat(t)"装入target,再通过 "pp.start(t);"后者因为使用new Threat(target)实例化的只有Threat类中的方法可以使用,但是前者可以使用t类自定义的方法.
一般继承于Thread类的使用前者,而继承于Runnable接口的使用后者.
8、 线程的中断
当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它他.例子:"Thread对象.interrupt();"通过调用Thread对象的isInterrupted()方法来查询是否当前线程中断.例子:"Thread对象.isInterrupt();"但是让线程开始休眠,此时线程已经被中断,所以这个时候会抛出中断异常,抛出中断异常之后会消除中断标志,随意最后在判断是否中断的时候,会会返回线程未中断.
J2SE知识点摘记(九)的更多相关文章
- J2SE知识点摘记(十九)
Collection 1.2.1 常用方法 Collection 接口用于表示任何对象或元素组.想要尽可能以常规方式处理一组元素时,就使用这一接口.Collection 在前面的大图也 ...
- J2SE知识点摘记(六)
1. static关键字的使用 static 关键字:可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类. static 修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯 ...
- J2SE知识点摘记(五)
1. 引用数据类型的传递 java用引用代替C++中的指针 fun()方法接收的参数是是Change c1,也就是说说fun()方法接受的是一个对象的引用,所以fun方法中所所做的操作就 ...
- J2SE知识点摘记(四)
1. 抽象类(abstract) 抽象类和抽象方法都必须用abstract关键字来修饰. 抽象类不能被直接实例化,也就是不能直接用new关键字去产生对象. 抽象方法只需声明,而不需实现. ...
- J2SE知识点摘记(三)
1. 在java只允许单继承,而不允许多重继承,也就是说一个子类只能有一个父类.但在java中却允许多层继承. 2. 非内部Class只能被public或者defaul ...
- J2SE知识点摘记(二)
1. 对象的声明 "类名 对象名 = new 类名();"例子:Person P;//先声明一个Person类的对象p p=new Person();//用new关键字实例化 ...
- J2SE知识点摘记(一)
1. 数组的声明时无法指定数组的长度. 2. 一维数组的声明和内存的分配 "数据类型 数组名[]; //声明一维数组 数组名= new 数据类型[ ...
- J2SE知识点摘记-数据库(二)
一. 查询数据 注意sql的内容. 通过ResultSet接口保存全部的查询结果,通过Statement接口中的executeQuery()方法查询.查询之后需要分别取出.通过nex ...
- J2SE知识点摘记-数据库(一)
一. 数据库连接 在JDBC的操作过程中,进行数据库连接的主要步骤如下: 通过Class.forName()加载数据库的驱动程序.首先需要利用来自Class类中的静态方法forNam ...
随机推荐
- CODEVS1047 邮票面值设计
题目描述 Description 给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤40)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1-MAX之 ...
- 用邻接表实现DFS和BFS
#include <stdio.h> #include <stdlib.h> #define MAXVERTEX 10 typedef char VertexType; //顶 ...
- A==?B(A,B超级大)
#include <iostream>#include <string.h>#include <cstring>using namespace std;struct ...
- Ubuntu 使用wget 命令下载JDK
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-co ...
- requirejs + vue 项目搭建2
上篇是年后的项目搭建的,时间比较仓促,感觉有点low 1.gulp-vue 文件对公用js的有依赖,以后别的同事拿去搭其他项目,估计会被喷 2.不支持vue-loader一样写模版语言和es6语法 最 ...
- raspberrypi VNC server
安装apt-get install tightvncserver tightvnc-java 启动vncserver -name vnc_raspi -depth 24 -geometry 800x6 ...
- HTTP 状态代码及其定义
所有 HTTP 状态代码及其定义. 代码 指示 2xx 成功 200 正常:请求已完成. 201 正常:紧接 POST 命令. 202 正常:已接受用于处理,但处理尚未完成. 20 ...
- ORACLE RAC中的oc4j和gsd资源以及RAC相关的进程
1.RAC相比单实例数据库多出的进程: LMS - Gobal Cache Service Process 全局缓存服务进程 LMD - Global Enqueue Service Daemon 全 ...
- javascript小知识1 this的用法
函数的应用: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- 用C#实现生成PDF文档
using System; using System.IO; using System.Text; using System.Collections; namespace PDFGenerator { ...