关于线程基础
A.
并发在java中本身就是无处不在,例如Servlet天生就是多线程的,还有一些后台线程,进程和线程出现的原因,基本都是为了更好更合理的利用资源,更公平!
如果是在单处理器上,那么并发从某种角度上看,就是将顺序执行的任务拆分成并发执行,算上上下文切换的开销,其实更花时间!但是有阻塞IO或者大计算的时候,如果没有并发,程序会停止。有了并发,其他任务还可以同时进行,更公平合理的分配了资源。
仅仅靠进程也可以实现并发,但是这里我们只讨论线程实现并发的方式!
B.
Java的Thread对线程的操作都是通过native方法,可以通过start方法开启一个线程,不过一个线程真正的事情是在run方法里做的,run方法只是普通的java方法,因此直接调用它,只是想相当于在当前线程调用一个普通方法,没什么意义, 因此要真正多线程就要实现Thread类重写run方法,并调用start方法启动!
另外,也可以将实现Runnable接口的类作为Thread类构造函数的参数,再调用start方法启动!
C.
1.
可以调用线程的静态sleep方法,实现线程休眠,它可以精确到纳秒,并且他响应中断,会抛出InterruptedException。另外,新版的API有了更显示的方法,就是
TimeUnit.MILLSECONDS.sleep(),本质上来说,还是调用Thread的sleep方法,但是因为sleep方法只接受毫秒和纳秒作为参数,因此TimeUnit实现了时间的转换,比如小时--à毫秒
2
线程之间也有一定的优先级,它是不确定的,高的执行平率高,低的执行平率低,但是不会有死锁,可以通过调用setPriority方法设置。
3
我们的主线程是用户线程(User Thread),另外还会有一些后台线程(守护线程,Daemon Thread),他们不是必须的,当所有非后台线程结束的时候,程序也就终止了,同时会杀死所有的后台线程。比如垃圾回收的线程!
4
从我们使用者的角度来说,没什么理由使用守护线程,因为他们随时可能终止,并且连finally方法也不会执行
一个线程可以等待另一个线程的结束,那就是在一个线程Al里面调用另一个线程B的join方法,表示A等待B,直到B结束。Java5以后提供了CountDownLatch和CycleBarrier等,也比较适合线程与线程之间的协作!
5
线程是有相对独立性的,在start方法之后,就和启动它的线程没关系了,因此我们也不能捕获到线程的异常,特别是运行时异常,只会在控制台打印!java5提供了Thread.UncaughtExceptionHandler接口,可以通过
Thread.setDefaultUncaughtExceptionHandler方法给所有线程注册异常处理器,也可以调用线程实例的setUncaughtExceptionHandler方法,为单独的线程设置处理器!
D
其他一些有趣的方法
println Thread.dumpStack()
println Thread.currentThread().state
//getAllStackTraces 一个Map获得所有线程的栈
Map map=Thread.getAllStackTraces()
println map.size()
List list=Thread.currentThread().getStackTrace()
//打出调用栈
list.each { println it }
分享到:
相关推荐
Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解Java线程讲解
电子书相关:包含4个有关JAVA线程的电子书(几乎涵盖全部有关线程的书籍) OReilly.Java.Threads.3rd.Edition.Sep.2004.eBook-DDU Java Thread Programming (Sams) java线程第二版中英文 java线程第二版中英文 ...
Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程Java线程
Java线程Java线程Java线程Java线程Java线程Java线程
Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-优先级 ...
java 线程java 线程java 线程java 线程java 线程java 线程java 线程java 线程java 线程
Java线程:概念与原理 Java线程:创建与启动 Java线程:线程栈模型与线程的变量 Java线程:线程状态的转换 Java线程:线程的同步与锁 Java线程:线程的交互 Java线程:线程的调度-休眠 Java线程:线程的调度-...
它提供关于发现的线程转储的统计信息,提供关于锁定监视器和等待线程的信息。它可以在线程之间进行区分,以寻找相似之处,并具有“长运行线程”检测。如果记录了类的直方图,它还提供了线程转储中的堆对象的概述。
Java线程模块Java线程之秒表新手学习Java线程模块时,利用Java中设置线程的暂停间隔,做的简易秒表
Java线程:概念与原理 2 一、操作系统中线程和进程的概念 2 二、Java中的线程 3 三、Java中关于线程的名词解释 3 四、线程的状态转换和生命周期 4 Java线程:创建与启动 7 Java线程:线程名称的设定及获取 10 Java...
Java的线程和Java AppletJava的线程和Java AppletJava的线程和Java AppletJava的线程和Java AppletJava的线程和Java Applet
java线程同步java线程同步java线程同步
java线程 线程 教程 java线程教程 java线程学习资料 本教程有什么内容? 本教程研究了线程的基础知识— 线程是什么、线程为什么有用以及怎么开始编写使用线程的简单 程序。 我们还将研究更复杂的、使用线程的应用...
java线程.pdf java 学习java
Java 模拟线程并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发 Java, 模拟线程并发,线程,并发
java 线程 新手java 线程 新手java 线程 新手java 线程 新手
Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式上传文件Java多线程设计模式...
分析java线程日志的工具,使用jstack把java线程日志dump下来,然后上传到该工具,就可以查看线程阻塞情况等信息。
这是一个关于Java线程的ppt文件,燕山大学信息学院计算机系 李 峰
Java多线程读大文件 java多线程写文件:多线程往队列中写入数据