本文由 ImportNew - liken 翻译自 Journaldev
 
Java线程是执行某些任务的轻量级进程。Java通过Thread类提供多线程支持,应用可以创建并发执行的多个线程。 应用中有两类线程——用户线程和守护线程。当启动应用时,main线程是创建的第一个用户线程,我们可以创建多个用户线程和守护线程。当所有用户进程执行完毕时,JVM终止程序。 可以对不同的线程设置不同的属性,但并不保证高优先级的线程在低优先级线程之前执行。线程调度器是操作系统的部分实现,当一个线程启动后,它的执行被线程调度器控制,JVM不会控制它的执行。 可通过扩展Thread类实现的Runnable接口创建线程。
1
2
3
4
5
Thread t = new Thread(new Runnable(){
    @Override
    public void run() {
    }
});

以上用几行代码就创建了新线程,在此,作为匿名类创建的Runnable接口,请阅读这篇文章学习内部类,嵌套类和匿名内部类。 几周之前,针对线程我已经发表了几篇有用的文章,你可以一步一步按照如下顺序学习Java中的线程。

  1. Java线程实例

    这是线程教程系列的第一篇文章,阅读它来了解进程和线程。 线程和进程之间的区别是什么,使用线程的优势和如何使用Runnable接口和Thread类创建线程。 该文还比较了Runnable接口和Thread类。

  2. Java线程休眠(Thread sleep)

    Java线程休眠 用于暂停当前执行的线程, 在将来的文章中,我们将广泛的使用线程休眠,因此最好了解它是如何工作的以及是否准确?

  3. Java线程的加入(Thread Join)

    有时我们需要等待其他线程结束后再继续执行,我们可以使用线程的加入来实现,本文将学习线程的加入是如何工作的以及何时使用它。

  4. Java线程状态(Thread States)

    理解线程的不同状态是重要的,本文将学习线程如何改变他的状态以及线程调度器如何改变线程的状态。

  5. Java 线程的wait, notify 和 notifyAll

    Java Object类包含三个方法,使用这三个方法,线程可以交流对于一个资源的锁状态,通过简单地Waiter-Notifier实现学习如何使用这些方法。

  6. Java线程安全于同步(Thread Safety and Synchronization)

    我们知道线程共享对象资源,但这将导致数据损坏,因为它们都不是原子操作。本文将学习使用不同方法实现Java的线程安全,学习正确使用synchronization操作符,synchronized方法和synchronized块。本文还有很多使用synchronized实例并讲解使用它们带来的问题。

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

    JVM使用main方法创建第一个线程,本文介绍日常遇到的通用异常和产生这些异常的根本原因以及如何解决它们。

  8. 单例类中的线程安全(Thread Safety in Singleton Class)

    本文将学习创建单例类的基本概念,什么是线程安全问题与他们如何能够做到在单例类的线程安全。

  9. Java守护线程(Daemon Thread)

    本文解释了守护进程和如何在Java中创建守护线程。

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

    我们知道线程共享对象的变量,但如何得到类级别的线程局部变量呢?Java提供了ThreadLocal实用类来创建线程局部变量,在这篇文章中学习如何在Java程序中创建ThreadLocal变量。

  11. Java线程转储(Thread Dump)

    Java线程转储提供程序的当前线程信息,这个信息对分析应用的性能问题或者查找解决死锁情况很有帮助,这篇文章阐明了Java中用于产生线程转储的不同方法。

  12. 如何分析和避免Java中的死锁(How to Analyze Deadlock and avoid it in Java)

    死锁是多线程等待彼此释放资源造成的循环依赖的情况。本文讨论了如何在Java程序中制造死锁,如何使用线程转储分析死锁以及避免Java程序死锁的最佳实践。

  13. Java计时器线程(Timer Thread)

    本文阐述了如何使用Java的Timer和TimerTask类来创建以固定时间间隔运行的任务。使用一个例子展现如何使用和取消计时器。

  14. Java生产者与消费者问题(Producer Consumer Problem)

    Java 5之前,生产者-消费者问题可以使用wait()和notify()方法解决,但BlockingQueue的引入更加简化了这个问题。通过本文我们学习Java中如何使用BlockingQueue来解决生产者-消费者问题。

  15. Java线程池(Thread Pool)

    Java线程池是等待处理任务的工作线程的集合,Java5中引入的Executor框架使得它很容易在java中使用Executors和的ThreadPoolExecutor类创建线程池,本文学习如何使用它们来在Java中创建线程池。

  16. Java回调属性(Callable Future)

    有时我们希望线程可以返回可用的变量,Java5的Callable就可用于这种情况,类似Runnable接口,我们可以使用Executor框架之星这些任务。

  17. Java FutureTask实例(FutureTask Example)

    FutureTask类是实现Future接口的基础类。 使用带Callable的实现和Executors的FutureTask进行异步处理。 FutureTask提供的实施方法来检查任务的状态,一旦执行结束,立刻将值返回给调用程序。覆写某些Future接口的实现方法是非常方便的。

该系列将随着更多线程教程文章的发表而持续增加,所以请保存为书签,以备将来需要。 请让通知我们是否遗漏了你想学习的指示。

原文链接: Journaldev 翻译: ImportNew.comliken
译文链接: http://www.importnew.com/9994.html

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

  1. Java的线程和多线程教程

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

  2. Java线程和多线程(十三)——Callable,Future,FutureTask

    在Java多线程之中,Callable和Future的使用时非常广泛的.在之前的文章中,我们了解了关于Java线程池基础的一些内容,知道如何提交Runnable的任务.但是,Runnable的任务是无 ...

  3. Java线程和多线程(十二)——线程池基础

    Java 线程池管理多个工作线程,其中包含了一个队列,包含着所有等待被执行的任务.开发者可以通过使用ThreadPoolExecutor来在Java中创建线程池. 线程池是Java中多线程的一个重要概 ...

  4. Java线程和多线程(三)——线程安全和同步

    线程安全在Java中是一个很重要的课题.Java提供的多线程环境支持使用Java线程.我们都知道多线程共享一些对象实例的话,可能会在读取和更新共享数据的事后产生数据不一致问题. 线程安全 之所以会产生 ...

  5. Java线程和多线程(一)——线程的基本概念

    Java 线程是一个轻量级执行任务的处理单元.Java提供了Thread类来支持多线程,开发者在应用中可以创建多个线程来支持并发执行任务. 在应用中存在两种类型的线程,用户线程和守护线程.当我们启动应 ...

  6. Java 线程与多线程

    Java是一门支持多线程的编程语言! 什么是进程? 计算机中内存.处理器.IO等资源操作都要为进程进行服务. 一个进程上可以创建多个线程,线程比进程更快的处理单元,而且所占用的资源也小,多线程的应用也 ...

  7. Java并发与多线程教程(3)

    Java中的锁 锁像synchronized同步块一样,是一种线程同步机制,但比Java中的synchronized同步块更复杂.因为锁(以及其它更高级的线程同步机制)是由synchronized同步 ...

  8. Java并发与多线程教程(2)

    Java同步块 Java 同步块(synchronized block)用来标记方法或者代码块是同步的.Java同步块用来避免竞争.本文介绍以下内容: Java同步关键字(synchronzied) ...

  9. Java并发与多线程教程(1)

    Java并发性与多线程介绍 在过去单CPU时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是多个任务 ...

随机推荐

  1. 解决 Eclipse 重写方法时参数为arg0,arg1

    我们在用eclipse 中Alt+ / 补全代码时.方法重写会出现arg0这样可读性差的参数. 原因是没有找到android 的源文件. 一.下载文件 需要下载 sources for android ...

  2. CodeForces 384A Coder

    Coder Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Submit Statu ...

  3. 2012 #1 Saving Princess claire_

    Saving Princess claire_ Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & % ...

  4. 【转载】C++知识库内容精选 尽览所有核心技术点

    原文:C++知识库内容精选 尽览所有核心技术点 C++知识库全新发布. 该知识库由C++领域专家.CSDN知名博客专家.资深程序员和项目经理安晓辉(@foruok)绘制C++知识图谱,@wangshu ...

  5. [Python]解决python链式extend的技巧

    众所周知python中的list是可以extend的,功能 旨在将两个list合并成一个.譬如[1,2,3].extend([4,5,6])=[1,2,3,4,5,6] 假如有一个list的list, ...

  6. sencha touch建立新项目

    首先你得有一个sencha touch的环境,如下图: 图1 touch的sdk环境 有了这个之后,通过在cmd中执行下列命令: sencha -sdk /path/to/framework gene ...

  7. 线程入门之sleep

    package com.thread; /** * <sleep:使线程休眠一些时间> * <功能详细描述> * * @author 95Yang */ public clas ...

  8. ctDNA 相关网站-liquid-biopsy

    http://www.gene-quantification.de/liquid-biopsy.html Liquid Biopsy -- Definitions Liquid Biopsy -- r ...

  9. ToStringBuilder 学习

    一.简介与引入   1.ToStringBuilder.HashCodeBuilder.EqualsBuilder.ToStringStyle.ReflectionToStringBuilder.Co ...

  10. ASP.NET常用正则表达式

    验证数字:^[0-9]*$ 验证n位的数字:^\d{n}$ 验证至少n位数字:^\d{n,}$ 验证m-n位的数字:^\d{m,n}$ 验证零和非零开头的数字:^(0|[1-9][0-9]*)$ 验证 ...