Java线程与多线程教程

本文由 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

时间: 2024-10-06 06:22:35

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

JAVA线程与多线程

去安卓面试的时候通常会问一些java问题,所以呢你可能觉得答问题时答案很蛋疼,今天来介绍一下线程. 先看几个概念: 线程:进程中负责程序执行的执行单元.一个进程中至少有一个线程. 多线程:解决多任务同时执行的需求,合理使用CPU资源.多线程的运行是根据CPU切换完成,如何切换由CPU决定,因此多线程运行具有不确定性. ● 线程 java中的线程 使用java.lang.Thread类或者java.lang.Runnable接口编写代码来定义.实例化和启动新线程. 一个Thread类实例只是一个对

Java线程及多线程技术及应用

第6 章 Java线程及多线程技术及应用 6.1线程基本概念 1.进程和线程的基础知识 l 进程:运行中的应用程序称为进程,拥有系统资源(cpu.内存) l 线程:进程中的一段代码,一个进程中可以哦有多段代码.本身不拥有资源(共享所在进程的资源) 在java中,程序入口被自动创建为主线程,在主线程中可以创建多个子线程. 区别: 1.是否占有资源问题 2.创建或撤销一个进程所需要的开销比创建或撤销一个线程所需要的开销大. 3.进程为重量级组件,线程为轻量级组件 l 多进程: 在操作系统中能同时运行

Java的线程和多线程教程

Java线程(Java Thread)是执行某些任务的一种轻量级进程.Java中的Thread类提供了多线程(multi-threading)功能,应用程序能够创建多个线程并同一时候执行. 在一个应用程序中,一般会有两种类型的线程-用户线程(user thread)和守护线程(daemon thread).当我们启动引用程序时,首先创建用户线程main,我们能够创建多个用户线程和守护线程.当全部的用户线程都运行完成时,JVM就会终止程序. 对不同的线程,我们能够设置对应的优先级,但并不意味着高优

java线程跟多线程

java创建线程两种方式: 1.继承Thread创建线程 /** * Created by lsf on 16/4/18. */ class NewThread extends Thread { NewThread(){ super(); //创建线程 start(); //启动线程 } public void run() { long starttime = System.currentTimeMillis(); System.out.println("child thread..."

Java线程和多线程(十五)——线程的活性

当开发人员在应用中使用了并发来提升性能的同一时候.开发人员也须要注意线程之间有可能会相互堵塞. 当整个应用运行的速度比预期要慢的时候,也就是应用没有依照预期的运行时间运行完成.在本章中.我们来须要细致分析可能会影响应用多线程的活性问题. 死锁 死锁的概念在软件开发人员中已经广为熟知了,甚至普通的计算机用户也会常常使用这个概念.虽然不是在正确的状况下使用.严格来说,死锁意味着两个或者很多其它线程在等待还有一个线程释放其锁定的资源,而请求资源的线程本身也锁定了对方线程所请求的资源. 例如以下: Th

Java线程及多线程技术及应用(二)

5线程同步互斥 1.线程同步互斥的一个示例 多个线程同时访问或操作同一资源时,很容易出现数据前后不一致的问题.请看下面的例子: 男孩拿着折子去北京银行海淀分行取钱 女孩拿着男孩的银行卡去西单百货疯狂购物 男孩走到柜台钱询问帐户余额 银行的业务员小姐亲切地告诉他:"您还有10000元!". 女孩看上了一件时髦的衣裳,准备买下 男孩在思考要取多少钱呢? 女孩到收银台准备刷卡消费 收银台刷卡机读取银行卡余额为10000元 女孩买衣服刷卡消费5000元 消费清单打印出来,消费:5000元  余

Java线程及多线程技术及应用(一)

1线程基本概念 1.进程和线程的基础知识 进程:运行中的应用程序称为进程,拥有系统资源(cpu.内存) 线程:进程中的一段代码,一个进程中可以哦有多段代码.本身不拥有资源(共享所在进程的资源) 在java中,程序入口被自动创建为主线程,在主线程中可以创建多个子线程. 区别: 1.是否占有资源问题 2.创建或撤销一个进程所需要的开销比创建或撤销一个线程所需要的开销大. 3.进程为重量级组件,线程为轻量级组件 3.多进程: 在操作系统中能同时运行多个任务(程序) 4.多线程: 在同一应用程序中有多个

【多线程】Java线程面试题 Top 50(转载)

Java线程面试题 Top 50 原文链接:http://www.importnew.com/12773.html 本文由 ImportNew - 李 广 翻译自 javarevisited.欢迎加入Java小组.转载请参见文章末尾的要求. 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发.调试.优化经验,所以线程

java 多线程(0) Java线程

线程 线程是系统调度的基本单元,每当创建一个进程时,会有许多的线程,也叫轻量级进程,在一个进程中拥有多个线程,各自都有自己的计数器,堆和局部变量属性,并且能够分享内存变量. 为什么要使用多线程  1.更多的处理器核心 2.更快的响应时间 3.更好的编程模型 优先级 线程优先级决定了线程需要多或少分配一些处理器资源的线程属性,通过priority来控制优先级,范围从1-10,在线程构建SetPriority(int)方法来修改优先级,默认为5. 线程的运行状态 状态名称 说明 NEW 初始状态,线