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知识点摘记(九)的更多相关文章

  1. J2SE知识点摘记(十九)

    Collection 1.2.1         常用方法 Collection 接口用于表示任何对象或元素组.想要尽可能以常规方式处理一组元素时,就使用这一接口.Collection 在前面的大图也 ...

  2. J2SE知识点摘记(六)

    1.        static关键字的使用 static 关键字:可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类. static 修饰属性:无论一个类生成了多少个对象,所有这些对象共同使用唯 ...

  3. J2SE知识点摘记(五)

    1.        引用数据类型的传递 java用引用代替C++中的指针 fun()方法接收的参数是是Change c1,也就是说说fun()方法接受的是一个对象的引用,所以fun方法中所所做的操作就 ...

  4. J2SE知识点摘记(四)

    1.        抽象类(abstract) 抽象类和抽象方法都必须用abstract关键字来修饰. 抽象类不能被直接实例化,也就是不能直接用new关键字去产生对象. 抽象方法只需声明,而不需实现. ...

  5. J2SE知识点摘记(三)

    1.         在java只允许单继承,而不允许多重继承,也就是说一个子类只能有一个父类.但在java中却允许多层继承. 2.         非内部Class只能被public或者defaul ...

  6. J2SE知识点摘记(二)

    1.    对象的声明 "类名 对象名 = new 类名();"例子:Person P;//先声明一个Person类的对象p p=new Person();//用new关键字实例化 ...

  7. J2SE知识点摘记(一)

    1.        数组的声明时无法指定数组的长度. 2.        一维数组的声明和内存的分配 "数据类型    数组名[]; //声明一维数组     数组名=  new 数据类型[ ...

  8. J2SE知识点摘记-数据库(二)

    一.          查询数据 注意sql的内容. 通过ResultSet接口保存全部的查询结果,通过Statement接口中的executeQuery()方法查询.查询之后需要分别取出.通过nex ...

  9. J2SE知识点摘记-数据库(一)

    一.          数据库连接 在JDBC的操作过程中,进行数据库连接的主要步骤如下: 通过Class.forName()加载数据库的驱动程序.首先需要利用来自Class类中的静态方法forNam ...

随机推荐

  1. GetProcessIdOfThread在WinXP及之前操作系统的替代实现

    还是学习VLD2.X版本看到的: 在Windows XP及之前的操作系统没有提供GetProcessIdOfThread的API,这里给出了一个替代的实现方式: 头文件: #if _WIN32_WIN ...

  2. js & jq 加载js

    最近做项目中, 经常要写js代码的, 从纯前端人员, 到我们这边的过度, 每个人写的风格都不一样, 大概整理了一下有这么几种 1.1 $(document).ready(function(){}); ...

  3. struts项目中添加的jar包

    一般我们使用struts时,添加的jar如下: commons-fileupload-1.2.1.jar commons-io-1.3.2.jar freemarker-2.3.16.jar java ...

  4. css3波浪形loading动画

    css3做个第一个动画,主要点在box-shadow和background的变化,虽然不难,但是还是有一定的技巧性的!备注下 html <div class="loading" ...

  5. struts2笔记11-OGNL

    1.OGNL Object-Graph Navigation Language,对象-图 导航语言,可以方便的操作struts2值栈对象 2.对象栈操作方法 (1)action普通属性的访问方法 &l ...

  6. python 通过ntlm验证下载文件

    最近使用python实现一个小工具,需要从网站下载文件,下载时服务端需要进行ntlm验证,否则返回401错误响应.经研究 requests库配合 requests-ntlm 可以解决这个问题. ntl ...

  7. 联想企业网盘:SaaS服务集群化持续交付实践

    1      前言 当代信息技术飞速发展,软件和系统的代码规模都变得越来越大,而且组件众多,依赖繁复,每次新版本的发布都仿佛是乘坐一次无座的绿皮车长途夜行,疲惫不堪.软件交付是一个复杂的工程,涉及到软 ...

  8. docker 保存更改的镜像:

    <pre name="code" class="ruby">保存更改的镜像: docker:/root# docker commit -m &quo ...

  9. mysql允许远程IP访问

    默认情况下Linux内的mysql数据库mysql,user表内的用户权限只是对localhost即本机才能登陆.需要更改权限: mysql> Grant all privileges on * ...

  10. 【HDU】4923 Room and Moor(2014多校第六场1003)

    Room and Moor Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) ...