Java的线程和多线程教程
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方法的工作机制和应用场景。
了解线程不同的状态是十分重要的,我们须要知道线程怎样改变自己的状态,以及线程调度程序怎样改变线程的状态。
5. Java线程的wait、notify和notifyAll方法
Java的Object类中包括三个方法wait、notify和notifyAll,线程能够通过调用这三个方法来沟通资源的锁定状态,我们能够通过一个简单的等待者-通知者(Waiter-Notifier)的演示样例来学习三个方法的使用。
6. Java线程的安全与同步(Synchronization)
我们知道,线程共享对象资源,因为这些操作不具有原子性,有可能会导致数据损坏。通过该文,我们将学到怎样在Java中调用不同方法时实现线程安全,以及同步(synchronization)、同步方法和同步锁的正确使用方法。
JVM使用main方法创建第一个线程,该文将介绍日常工作中常见的一些异常,这些异常出现的根本原因,以及解决方式。
在这片文章中,你将会学到有关创建单例类的最基本概念,单例类可能会出现的线程安全问题,以及怎样在单例类中实现线程安全。
该文简单地介绍了守护线程,以及怎样在Java中创建守护线程。
我们都知道,线程共享类的变量,假设我们想要获取在类层次创建的线程本地(thread-local)变量,该怎么办。Java提供了ThreadLocal公用类来创建线程本地变量。该文介绍怎样再Java程序中创建线程本地变量。
Java线程转储为程序提供了当前线程的信息,该信息有助于分析应用程序的性能和解决死锁问题。该文介绍了Java中能用于实现线程转储的各种方法。
12. 在Java中怎样分析并避免死锁
多个线程相互间等待其它线程释放资源,由此导致循环依赖,这种情况就叫做死锁。该文谈论了Java程序中出现死锁的情况,怎样使用线程转储来发现死锁,以及在实践中避免Java程序死锁的最佳方法。
本文介绍怎样使用Java定时器(Java Timer)和TimerTask类来创建定时运行的任务,并提供演示样例程序来演示怎样使用和取消定时器。
14. Java中的生产者(Producer)-消费者(Customer)问题
在Java5之前,能够使用wait()和notify()方法来解决生产证-消费者问题,而BlockingQueue的引入提供了一种更为建档的方法。该文介绍在Java中怎样使用BlockingQueue来解决生产者和消费者问题。
Java线程池是等待处理工作的线程集合,依据Java5中关于Executor框架的介绍,我们非常easy就能够用Executors和ThreadPoolExecutor类来创建线程池,该文就介绍怎样用它们来创建Java线程池。
我们有时会希望线程提供返回值,Java5中的Callable接口就适用于这样的情况,它和Runnable接口相似,我们能够使用Executor框架来运行这些任务。
FutureTask是实现Future接口的基础实体类。我们通常将它与Callable实现和Executor结合应用于异步处理。FutureTask提供实现方法来检查任务的状态,并在任务结束时将值返回给调用程序。重写Future接口的实现方法是非常easy的。
该文章列表将会更新很多其它关于线程的文章,请将本文存入书签以备后用。
假设本文中缺少您想要了解的内容,请告知我们。
Java的线程和多线程教程的更多相关文章
- Java线程与多线程教程
本文由 ImportNew - liken 翻译自 Journaldev. Java线程是执行某些任务的轻量级进程.Java通过Thread类提供多线程支持,应用可以创建并发执行的多个线程. 应用 ...
- java中线程安全问题
在java中单线程和多线程是什么意思,他们有什么区别,分别的作用是什么? 在一个程序中,这些独立运行的程序片断叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”.多线程处理一个常见的例 ...
- 在java中怎样实现多线程?线程的4种状态
一.在java中怎样实现多线程? extends Thread implement Runnable 方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 ...
- Java高级教程:Java并发性和多线程
Java并发性和多线程: (中文,属于人工翻译,高质量):http://ifeve.com/java-concurrency-thread-directory/ (英文):http://tutoria ...
- java线程跟多线程
java创建线程两种方式: 1.继承Thread创建线程 /** * Created by lsf on 16/4/18. */ class NewThread extends Thread { Ne ...
- java 并发性和多线程 -- 读感 (一 线程的基本概念部分)
1.目录略览 线程的基本概念:介绍线程的优点,代价,并发编程的模型.如何创建运行java 线程. 线程间通讯的机制:竞态条件与临界区,线程安全和共享资源与不可变性.java内存模型 ...
- Java中线程的使用 (2)-多线程、线程优先级、线程睡眠、让步、阻塞
Java中线程的使用 (2)-多线程.线程优先级.线程睡眠.让步.阻塞 (一)多线程使用方法 说明:创建每个新的线程,一定要记得启动每个新的线程(调用.start()方法) class Xc3 ext ...
- 多线程(五) java的线程锁
在多线程中,每个线程的执行顺序,是无法预测不可控制的,那么在对数据进行读写的时候便存在由于读写顺序多乱而造成数据混乱错误的可能性.那么如何控制,每个线程对于数据的读写顺序呢?这里就涉及到线程锁. 什么 ...
- Java 非线程安全的HashMap如何在多线程中使用
Java 非线程安全的HashMap如何在多线程中使用 HashMap 是非线程安全的.在多线程条件下,容易导致死循环,具体表现为CPU使用率100%.因此多线程环境下保证 HashMap 的线程安全 ...
随机推荐
- 栈应用之 括号匹配问题(Python 版)
栈应用之 括号匹配问题(Python 版) 检查括号是否闭合 循序扫描被检查正文(一个字符)里的一个个字符 检查中跳过无关字符(所有非括号字符都与当前处理无关) 遇到开括号将其压入栈 遇到闭括号时弹出 ...
- python网络编程-socket上传下载文件(包括md5验证,大数据发送,粘包处理)
ftp server 1) 读取文件名 2)检查文件是否存在 3)打开文件 4)检查文件大小 5)发送文件大小给客户端 6)等客户端确认 7)开始边读边(md5计算)发数据 8)给客户端发md5 ft ...
- 洛谷P1038神经网络
传送门啦 一个拓扑排序的题,感觉题目好难懂... #include <iostream> #include <cstdio> #include <cstring> ...
- Unix IPC之读写锁
linux中读写锁的rwlock介绍 读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁: 1,当读写锁是写加锁状态时, 在这个锁被解锁之前, 所 ...
- SQL SERVER 断开所有连接(转)
通过sql server management studio对数据进行管理,比如数据库改名等,经常遇到有正在运行的连接,以致无法操作,这时候断掉所有的连接很有必要.代码如下:(会断掉某个库的所有连接, ...
- SQL SERVER中查询某个表或某个索引是否存在
查询某个表是否存在: 在实际应用中可能需要删除某个表,在删除之前最好先判断一下此表是否存在,以防止返回错误信息.在SQL SERVER中可通过以下语句实现: IF OBJECT_ID(N'表名称', ...
- 使用django发送邮件时的连接超时问题解决
一.报错 研究报错半天,没看出代码有什么毛病,就是发送邮件时连接超时,发送邮件的连接用户名密码都没有错误,于是就网上各种查... 终于皇天不负有心人,找到答案了.. 在服务器上输入telnet smt ...
- 浏览器被hao123,hao524劫持的解决办法
今天研究(翻,墙),装了几个插件,什么云帆.外遇.蓝灯 后来我的google浏览器被hao123劫持,百度浏览器被hao524劫持 删除浏览器快捷方式.属性目标里的后缀,过不多久又被劫持,把我搞毛了 ...
- Pyhton核心编程-Chap2习题-DIY
在学Python,在看<Python核心编程>的pdf,做了Chap2的题目,答案为DIY # Filename: 2-11.py # Author: ChrisZZ mylist = [ ...
- 全方位掌握nsis脚本
NSIS 确实是一个不错的安装程序制作软件.新版本 2.0a7 真正实现了中文支持和支持 WinXP 的安装对话框. 不过要用它实现漂亮的安装界面和完美的安装功能就必须好好的写脚本. 而 NSIS 的 ...