Java线程是执行某些任务的轻量级进程。Java通过Thread类提供多线程支持,应用可以创建并发执行的多个线程。 应用中有两类线程——用户线程和守护线程。当启动应用时,main线程是创建的第一个用户线程,我们可以创建多个用户线程和守护线程。当所有用户进程执行完毕时,JVM终止程序。 可以对不同的线程设置不同的属性,但并不保证高优先级的线程在低优先级线程之前执行。线程调度器是操作系统的部分实现,当一个线程启动后,它的执行被线程调度器控制,JVM不会控制它的执行。 可通过扩展Thread类实现的Runnable接口创建线程。
Thread t = new Thread(new Runnable(){
@Override
public void run() {
}
});
以上用几行代码就创建了新线程,在此,作为匿名类创建的Runnable接口,请阅读这篇文章学习内部类,嵌套类和匿名内部类。 几周之前,针对线程我已经发表了几篇有用的文章,你可以一步一步按照如下顺序学习Java中的线程。
Java线程实例
这是线程教程系列的第一篇文章,阅读它来了解进程和线程。 线程和进程之间的区别是什么,使用线程的优势和如何使用Runnable接口和Thread类创建线程。 该文还比较了Runnable接口和Thread类。
Java线程休眠(Thread sleep)
Java线程休眠 用于暂停当前执行的线程, 在将来的文章中,我们将广泛的使用线程休眠,因此最好了解它是如何工作的以及是否准确?
Java线程的加入(Thread Join)
有时我们需要等待其他线程结束后再继续执行,我们可以使用线程的加入来实现,本文将学习线程的加入是如何工作的以及何时使用它。
Java线程状态(Thread States)
理解线程的不同状态是重要的,本文将学习线程如何改变他的状态以及线程调度器如何改变线程的状态。
Java 线程的wait, notify 和 notifyAll
Java Object类包含三个方法,使用这三个方法,线程可以交流对于一个资源的锁状态,通过简单地Waiter-Notifier实现学习如何使用这些方法。
Java线程安全于同步(Thread Safety and Synchronization)
我们知道线程共享对象资源,但这将导致数据损坏,因为它们都不是原子操作。本文将学习使用不同方法实现Java的线程安全,学习正确使用synchronization操作符,synchronized方法和synchronized块。本文还有很多使用synchronized实例并讲解使用它们带来的问题。
主线程中的Java异常(Java Exception in thread main)
JVM使用main方法创建第一个线程,本文介绍日常遇到的通用异常和产生这些异常的根本原因以及如何解决它们。
单例类中的线程安全(Thread Safety in Singleton Class)
本文将学习创建单例类的基本概念,什么是线程安全问题与他们如何能够做到在单例类的线程安全。
Java守护线程(Daemon Thread)
本文解释了守护进程和如何在Java中创建守护线程。
Java线程本地变量(Thread Local)
我们知道线程共享对象的变量,但如何得到类级别的线程局部变量呢?Java提供了ThreadLocal实用类来创建线程局部变量,在这篇文章中学习如何在Java程序中创建ThreadLocal变量。
Java线程转储(Thread Dump)
Java线程转储提供程序的当前线程信息,这个信息对分析应用的性能问题或者查找解决死锁情况很有帮助,这篇文章阐明了Java中用于产生线程转储的不同方法。
如何分析和避免Java中的死锁(How to Analyze Deadlock and avoid it in Java)
死锁是多线程等待彼此释放资源造成的循环依赖的情况。本文讨论了如何在Java程序中制造死锁,如何使用线程转储分析死锁以及避免Java程序死锁的最佳实践。
Java计时器线程(Timer Thread)
本文阐述了如何使用Java的Timer和TimerTask类来创建以固定时间间隔运行的任务。使用一个例子展现如何使用和取消计时器。
Java生产者与消费者问题(Producer Consumer Problem)
Java 5之前,生产者-消费者问题可以使用wait()和notify()方法解决,但BlockingQueue的引入更加简化了这个问题。通过本文我们学习Java中如何使用BlockingQueue来解决生产者-消费者问题。
Java线程池(Thread Pool)
Java线程池是等待处理任务的工作线程的集合,Java5中引入的Executor框架使得它很容易在java中使用Executors和的ThreadPoolExecutor类创建线程池,本文学习如何使用它们来在Java中创建线程池。
Java回调属性(Callable Future)
有时我们希望线程可以返回可用的变量,Java5的Callable就可用于这种情况,类似Runnable接口,我们可以使用Executor框架之星这些任务。
Java FutureTask实例(FutureTask Example)
FutureTask类是实现Future接口的基础类。 使用带Callable的实现和Executors的FutureTask进行异步处理。 FutureTask提供的实施方法来检查任务的状态,一旦执行结束,立刻将值返回给调用程序。覆写某些Future接口的实现方法是非常方便的。 |
|