Java多线程编程
进程,即运行中的程序,多任务操作系统中并发的一个任务(CPU是分时间片执行多个进程的),线程,其本质是进程中顺序
的执行流程,进程有独立的进程空间进程中的数据存放空间(对空间和栈空间)是独立的。线程没有独立的存放数据的空间,
数据存储空间(堆空间)是共享的,线程间的栈空间是独立的,线程消耗的资源比进程小。
线程,是进程(运行中的程序)中顺序的执行流程,进程可以划分出多个线程。
JVM(java虚拟机)本身就是一个进程,java只能够申请创建线程。
操作系统决定线程是否有优先级,独占式的操作系统中系统会有优先级的概念,共享式的操作系统则不会优先级的。
Java中的线程也是对象,线程类是Thread类,线程是操作系统创建并进行维护的资源,线程对象表示一个线程,本身不是线
程。通过线程对象来申请创建,中止线程,访问底层的线程资源。
线程包含了三部分,cpu资源,代码,数据存储空间。
线程对象调用start()方法,线程对象就会向操作系统申请线程启动,除了申请的线程,还有main方法的线程,也就是主线
程。
注意:只有运行状态的线程才有机会执行代码,主线程的中止不会影响其他的正在运行中的线程,朱线程中止也就
是main()方法退出了。只有进程中的所有线程都中止时,进程(JVM进程)才会退出,只要有线程没有中止,进程就不会退
出。
线程编程的两种方法
1, 写一个类,继承Thread类,覆盖Thread类中继承来的run()方法,这样就写好了自定义的线程类。
例:
public class Test{
public static void main(String[] args){
Thread t=new A();
t.start();
}
class A extends Thread{
public void run(){
...
}
}
2,写一个类,实现Runable接口,实现其中的run()方法。这种方法写好的类的对象需要作为线程类创建对象时构造方法的
参数。
例:
public class Test{
public static void main(String[] args){
Runable r=new b();//目标对象
Thread t=new Thread(r);//用目标对象构造线程对象
t.start();
}
class b implements Runable{
public void run(){
...
}
}
Thread类的方法
public static void sleep(long millis)
throws InterruptedException
括号中以毫秒为单位, 使线程停止一段时间,间隔期满后,线程不一定立即恢复执行。
当main()运行完毕,即使在结束时时间片还没有用完,CPU也放弃此时间片,继续运行其他程序。
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace(e);
}
public final void join() throws InterruptedException
表示其他运行线程放弃执行权,进入阻塞状态,直到调用线程结束。
实际上是把并发的线程变为串行运行。
线程的优先级:1-10,越大优先级越高,优先级越高被OS选中的可能性就越大。(不建议使用,因为不同操作系统的优先级
并不相同,使得程序不具备跨平台性,这种优先级只是粗略地划分)。
注:程序的跨平台性:除了能够运行,还必须保证运行的结果。
Public static void field()
使当前线程马上交出执行权,回到可运行状态,等待OS的再次调用。
Public final Boolean isActive()
验证当前线程是否是活动的,不管它是否正在运行。
线程的生命周期
下面为线程中的7中非常重要的状态:(有的书上也只有认为前五种状态:而将“锁池”和“等待池”都看成是“阻塞”状态
的特殊情况:这种认识也是正确的,但是将“锁池”和“等待池”单独分离出来有利于对程序的理解)
阻塞
结束
①
⑴ run()方法运行结束
② ⑵
③ ⑶
start()
OS分配CPU
可运行
CPU时间片结束运行
或调用yield()
o.wait()
等待锁标记
o.notify()
1, 初始状态,线程创建,线程对象调用start()方法。
2,可运行状态,也就是等待Cpu资源,等待运行的状态。
3,运行状态,获得了Cpu资源,正在运行状态。
4,阻塞状态,也就是让出Cpu资源,进入一种等待状态,而且不是可运行状态,有三种情况会进入阻塞状态。
1)如等待输入(输入设备进行处理,而CPU不处理),则放入阻塞,直到输入完毕,阻塞结束后会进入可运行状态。
2)线程休眠,线程对象调用sleep()方法,阻塞结束后会进入可运行状态。
3)线程对象2调用线程对象1的join()方法,那么线程对象2进入阻塞状态,直到线程对象1中止。
5,中止状态,线程执行结束。所有线程都进入中止状态Java虚拟机进程才结束。
6,锁池状态
7,等待队列
分享到:
相关推荐
《Java核心技术》第九版...通过学习《Java核心技术》第九版,读者不仅能掌握Java编程的基础,还能了解到许多高级特性和最佳实践,从而提升自己的编程能力。这本书适合初学者入门,也适合有一定经验的开发者查阅和提升。
了解Java 语言 了解Java 程序的类型 掌握Java 程序运行环境的配置 理解Java 虚拟机 (JVM) 了解Java的特点
Java入门的基础资料,了解Java 语言 ; 了解Java 程序的类型 ; 掌握Java 程序运行环境的配置 ; 理解Java 虚拟机 (JVM); 了解Java的特点
Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...
在本书中,你将深入理解这些基本概念,了解Java如何实现这些目标。 第一章通常会介绍Java开发环境的搭建,包括JDK(Java Development Kit)的安装、配置,以及如何编写并运行第一个"Hello, World!"程序。这一部分...
14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合转换(了解).zip14.java集合...
Java 汇总学习简介 Java 作为一种广泛使用的高级编程语言,其学习涵盖了许多方面。在深入探讨之前,我们先来了解一下 Java 的基本课程,包括 SL110、SL275 和 SL285,这些课程通常由 SUN 公司提供,旨在帮助初学者...
程序设计语言 了解Java平台特性 了解Java集成开发环境 使用Eclipse开发Java应用 了解Java程序结构组成 常见问题
《Core Java.JAVA核心技术(中文版)》是学习Java编程的重要参考资料,主要涵盖了Java语言的基础以及进阶知识。这本书深入浅出地讲解了Java的核心概念和技术,为读者提供了全面而细致的学习路径。以下是对该书内容的...
Java语言的基本语法是学习Java的第一步,了解Java语言的基本语法可以帮助开发者更好地掌握Java语言。 2. Java面向对象编程:Java语言支持面向对象编程(OOP),它可以模拟现实世界中的对象和关系。面向对象编程的...
Java面试通常涵盖多个...并发编程:了解Java中的线程、同步、锁等机制,以及Java并发包中的工具类。 JVM与性能调优:对Java虚拟机(JVM)有一定了解,包括内存管理、垃圾回收等方面,并知道如何进行基本的性能调优。
本资源包含几十个精心设计的Java简历模板,旨在帮助这个阶段的程序员更好地突出自己的专业能力,提高面试机会。 这些简历模板通常会涵盖以下几个关键部分: 1. **基本信息**:包括姓名、联系方式(电话、邮箱)、...
2. Java集合框架的高级应用,包括各类集合接口、类以及算法。 3. 输入输出(I/O)流的高级使用,涉及字节流和字符流。 4. 网络编程,包括套接字编程和NIO包的使用。 5. 多线程和并发编程,探讨线程安全、锁机制、...
1. **Java语言基础**:了解Java的语法结构,包括变量、数据类型、运算符、流程控制(如if语句、switch语句、for和while循环)以及异常处理。 2. **面向对象编程**:掌握类、对象、封装、继承和多态等概念,理解如何...
对Java语言的基本认识,通过本文件可以了解Java语言。
Java制作的输入法是一种利用Java编程语言开发的计算机输入法软件。...在提供的`CantoInput.java`文件中,我们可以看到实现输入法功能的具体Java代码,通过阅读和学习这个文件,可以更具体地了解Java输入法的实现细节。
通过阅读《Java核心技术 第12版》,读者不仅能掌握Java语言的基本语法和核心概念,还能了解高级特性并提升实际编程技能。这本书不仅适合自学,也适合作为大学或专业培训课程的教材,旨在帮助读者成为一名熟练的Java...
5. 异常(Exception):了解何时以及如何处理异常。 总的来说,Java API文档中文网页版是Java开发者必备的参考资料,它可以帮助我们理解和使用Java平台提供的各种功能,提高编程的准确性和效率。在实际开发中,熟练...