Java线程(Java Thread)是执行某些任务的一种轻量级进程。Java中的Thread类提供了多线程(multi-threading)功能,应用程序能够创建多个线程并同一时候执行。

在一个应用程序中,一般会有两种类型的线程-用户线程(user thread)守护线程(daemon thread)。当我们启动引用程序时,首先创建用户线程main,我们能够创建多个用户线程和守护线程。当全部的用户线程都运行完成时,JVM就会终止程序。

对不同的线程,我们能够设置对应的优先级,但并不意味着高优先级线程会先于低优先级线程运行。线程的调度是由操作系统来完毕的,每当线程启动后,线程的运行是由线程调度程序来控制的,而非JVM。

我们能够通过两种方式来创建线程:实现Runnable接口,或者,继承Thread类。

Thread t = new Thread(new Runnable() {
@Override
public void run() {
}
});

以上代码创建了一个新的线程,当中,我们将Runnable作为匿名类来实现,能够阅读文章《Java Nested Classes
- java inner class, static nested class, local inner class and anonymous inner class
》来了解内部类、嵌套类和匿名内部类。

在近期的几周,我已就线程发表了几篇干货,通过阅读这些文章,你会对Java中的线程有所了解。



1. Java线程演示样例 【译文

    这是线程教程系列文章中的第一篇,阅读该文能够了解进程(Process)线程(Thread),进程和线程的差别,使用线程的优点,以及,怎样通过Runnable接口和Thread类来创建线程。

该文中还对Runnable接口和Thread类进行了比較。

2. Java线程的休眠(Sleep 【译文

Java线程的休眠是用于暂停当前线程的运行,在兴许的文章中将会大量应用到线程休眠,所以我们最好了解它的工作机制以及是否准确。

3. Java线程的增加(Join) 【译文

有时,我们须要等待其它线程结束执行后才干执行任务,这样的情况下,我们能够使用Thread-join方法,该文将介绍Thread-join方法的工作机制和应用场景。

4. Java线程的状态(States)

了解线程不同的状态是十分重要的,我们须要知道线程怎样改变自己的状态,以及线程调度程序怎样改变线程的状态。

5. Java线程的wait、notify和notifyAll方法

Java的Object类中包括三个方法wait、notify和notifyAll,线程能够通过调用这三个方法来沟通资源的锁定状态,我们能够通过一个简单的等待者-通知者(Waiter-Notifier)的演示样例来学习三个方法的使用。

6. Java线程的安全与同步(Synchronization)

我们知道,线程共享对象资源,因为这些操作不具有原子性,有可能会导致数据损坏。通过该文,我们将学到怎样在Java中调用不同方法时实现线程安全,以及同步(synchronization)、同步方法和同步锁的正确使用方法。

7. Java主线程(main)中的异常

JVM使用main方法创建第一个线程,该文将介绍日常工作中常见的一些异常,这些异常出现的根本原因,以及解决方式。

8. 单例(Singleton)类的线程安全

在这片文章中,你将会学到有关创建单例类的最基本概念,单例类可能会出现的线程安全问题,以及怎样在单例类中实现线程安全。

9. Java的守护线程(Daemon Thread)

该文简单地介绍了守护线程,以及怎样在Java中创建守护线程。

10. Java的线程本地变量(Thread Local)

我们都知道,线程共享类的变量,假设我们想要获取在类层次创建的线程本地(thread-local)变量,该怎么办。Java提供了ThreadLocal公用类来创建线程本地变量。该文介绍怎样再Java程序中创建线程本地变量。

11. Java中的线程转储(Thread Dump)

Java线程转储为程序提供了当前线程的信息,该信息有助于分析应用程序的性能和解决死锁问题。该文介绍了Java中能用于实现线程转储的各种方法。

12. 在Java中怎样分析并避免死锁

多个线程相互间等待其它线程释放资源,由此导致循环依赖,这种情况就叫做死锁。该文谈论了Java程序中出现死锁的情况,怎样使用线程转储来发现死锁,以及在实践中避免Java程序死锁的最佳方法。

13. Java的定时器线程(Timer Thread)

本文介绍怎样使用Java定时器(Java Timer)和TimerTask类来创建定时运行的任务,并提供演示样例程序来演示怎样使用和取消定时器。

14. Java中的生产者(Producer)-消费者(Customer)问题

在Java5之前,能够使用wait()和notify()方法来解决生产证-消费者问题,而BlockingQueue的引入提供了一种更为建档的方法。该文介绍在Java中怎样使用BlockingQueue来解决生产者和消费者问题。

15. Java线程池(Thread Pool)

Java线程池是等待处理工作的线程集合,依据Java5中关于Executor框架的介绍,我们非常easy就能够用Executors和ThreadPoolExecutor类来创建线程池,该文就介绍怎样用它们来创建Java线程池。

16. Java的Callable接口和Future接口

我们有时会希望线程提供返回值,Java5中的Callable接口就适用于这样的情况,它和Runnable接口相似,我们能够使用Executor框架来运行这些任务。

17. Java的FutureTask演示样例

FutureTask是实现Future接口的基础实体类。我们通常将它与Callable实现和Executor结合应用于异步处理。FutureTask提供实现方法来检查任务的状态,并在任务结束时将值返回给调用程序。重写Future接口的实现方法是非常easy的。

该文章列表将会更新很多其它关于线程的文章,请将本文存入书签以备后用。

假设本文中缺少您想要了解的内容,请告知我们。

原文地址:Java Thread and Multithreading Tutorial

Java的线程和多线程教程的更多相关文章

  1. Java线程与多线程教程

    本文由 ImportNew - liken 翻译自 Journaldev.   Java线程是执行某些任务的轻量级进程.Java通过Thread类提供多线程支持,应用可以创建并发执行的多个线程. 应用 ...

  2. java中线程安全问题

    在java中单线程和多线程是什么意思,他们有什么区别,分别的作用是什么? 在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”.多线程处理一个常见的例 ...

  3. 在java中怎样实现多线程?线程的4种状态

    一.在java中怎样实现多线程? extends Thread implement Runnable 方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 ...

  4. Java高级教程:Java并发性和多线程

    Java并发性和多线程: (中文,属于人工翻译,高质量):http://ifeve.com/java-concurrency-thread-directory/ (英文):http://tutoria ...

  5. java线程跟多线程

    java创建线程两种方式: 1.继承Thread创建线程 /** * Created by lsf on 16/4/18. */ class NewThread extends Thread { Ne ...

  6. java 并发性和多线程 -- 读感 (一 线程的基本概念部分)

    1.目录略览      线程的基本概念:介绍线程的优点,代价,并发编程的模型.如何创建运行java 线程.      线程间通讯的机制:竞态条件与临界区,线程安全和共享资源与不可变性.java内存模型 ...

  7. Java中线程的使用 (2)-多线程、线程优先级、线程睡眠、让步、阻塞

    Java中线程的使用 (2)-多线程.线程优先级.线程睡眠.让步.阻塞 (一)多线程使用方法 说明:创建每个新的线程,一定要记得启动每个新的线程(调用.start()方法) class Xc3 ext ...

  8. 多线程(五) java的线程锁

    在多线程中,每个线程的执行顺序,是无法预测不可控制的,那么在对数据进行读写的时候便存在由于读写顺序多乱而造成数据混乱错误的可能性.那么如何控制,每个线程对于数据的读写顺序呢?这里就涉及到线程锁. 什么 ...

  9. Java 非线程安全的HashMap如何在多线程中使用

    Java 非线程安全的HashMap如何在多线程中使用 HashMap 是非线程安全的.在多线程条件下,容易导致死循环,具体表现为CPU使用率100%.因此多线程环境下保证 HashMap 的线程安全 ...

随机推荐

  1. day03作业

    ---恢复内容开始--- 1.+.-.*./.%.++.-- ①正号:②加法运算:③连接符 除法是两个数相除所得的结果,取余是除法操作的余数. ++前置表示现将一个数自加然后进行赋值,++后置表示先赋 ...

  2. java基础21 System类和Runtime类

    一.System系统类 1.1.System系统类 主要用于获取系统信息 1.2.System类的常用方法 arraycopy(Object src, int srcPos, Object dest, ...

  3. AdvStringGrid 滚动条问题

    1.默认水平方向 滚动条是 小的 滚动的时候 数据会随着滚动 而 滚动的. 2.默认垂直方向 滚动条是 小的 滚动的时候 数据不会随着滚动 而滚动的.ScrollSynch := True; 垂直方向 ...

  4. Jenkins的授权和访问控制

    默认的Jenkins不包含任何的安全检查,任何人可以修改Jenkins设置,job和启动build等.显然地在大规模的公司需要多个部门一起协调工作的时候,没有任何安全检查会带来很多的问题. 在系统管理 ...

  5. <编程之美>经典面试题:求二叉树节点的最大距离(我的解法,最容易理解的版本?)

    题目介绍: 如果把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两个节点之间的个数. 写一个程序求一棵二叉树中相距最远的两个节点之间的距离. 如下图所示, ...

  6. java jar 自启动 centos7 systemctl

    我本地有一个 data-service.jar 1. 编写启动脚本  data-service-start [root@iz2ze0fq2isg8vphkpos5sz shell]# more dat ...

  7. Sample ASP.NET IHttpHandler

    LoggerHandler.cs using System; using System.Collections.Generic; using System.Diagnostics; using Sys ...

  8. Session机制一(基础知识点)

    一: 1.介绍 对于会话与状态管理,有两种方式,cookie与session. 其中,cookie机制采用客户端保持cookie的方案. 而,session机制采用的是服务器保持Http状态信息的方案 ...

  9. Adobe Photoshop CC 2017-18.0安装教程

    Adobe Photoshop CC 2017-18.0安装教程 注:下载链接在文章后面 第一步:首先请将电脑的网络断开,很简单:禁用本地连接或者拔掉网线,这样就可以免除登录Creative Clou ...

  10. Git 码云操作

    https://www.cnblogs.com/lanxiang/p/7487971.html 将项目提交到码云 在码云创建项目 然后在项目目录下: 打开后输入: git init 目录下出现.git ...