java多线程机制

合集下载

Java编程基础及应用(第2版)教学课件第9章Java多线程机制

Java编程基础及应用(第2版)教学课件第9章Java多线程机制
进程是程序的一次动态执行 过程,它对应了从代码加载、执 行至执行完毕的一个完整过程, 这个过程也是进程本身从产生、 发展至消亡的过程。
现代操作系统可以同时管理 一个计算机系统中的多个进程, 即可以让计算机系统中的多个进 程轮流使用CPU资源。
§9.1.2 进程与线程
线程是比进程更小的执行 单位,一个进程在其执行过程 中,可以产生多个线程,形成 多条执行线索,每条线索,即 每个线程也有它自身的产生、 存在和消亡的过程。
例题1
§9.2.3 线程调度与优先级
处于就绪状态的线程首先进入就绪队列排队等候 CPU资源,同一时刻在就绪队列中的线程可能有多个。 Java虚拟机(JVM)中的线程调度器负责管理线程, 调度器把线程的优先级分为10个级别,分别用Thread 类中的类常量表示。
Java 调 度 器 的 任 务 是 使 高 优 先 级 的 线 程 能 始 终 运 行 , 一旦时间片有空闲,则使具有同等优先级的线程以轮流 的方式顺序使用时间片。
5.currentThread():该方法是Thread类中的类方法,可以用类名调用,该方法
返回当前正在使用CPU资源的线程。
6.interrupt() :一个占有CPU资源的线程可以让休眠的线程调用interrupt()方
法“吵醒”自己,即导致休眠的线程发生InterruptedException异常,从而结束休眠, 重新排队等待CPU资源。
例子5
例子5中有两个线程:会计和出纳,他俩共同拥有一个帐本。 他俩都可以使用saveOrTake(int amount)方法对帐本进行访问, 会计使用saveOrTake(int amount)方法时,向帐本上写入存钱记 录;出纳使用saveOrTake(int amount)方法时,向帐本写入取钱 记录。因此,当会计正在使用saveOrTake(int amount)时,出纳 被禁止使用,反之也是这样。

JAVA 练习题第12章--java多线程机制

JAVA 练习题第12章--java多线程机制

连续输出10次带标号的“Hello!”


{
while(i++<10) { System.out.print(i+":Hello");


}
}

写出以下程序的功能: class TEST implements Runnable { public static void main(String args[]) {


TEST t=new TEST();
Thread tt=new Thread(t); tt.start(); }
改后才能符合A线程的需要,这时线程A就要等待 线程B完成修改工作,这种现象称为( ) A、线程的同步 B、线程的互斥 C、线程的调度 D、线程的就绪
A
最常使用的多线程实现方法是__________。
A、继承Thread类
B、继承Threader类 C、使用Runnable接口 D、使用Thread接口
C
线程在,新建和____
____状态调用isAlive()方法
返回的值是false。
死亡
7.在Java中,创建线程的方法有两种:
一种方法是通过(
另一种方法是通过(
)来实现, )来实现。
创建 Thread 类的子类 实现 Runnable 接口的类
8.(
)将启动线程对象,使之从新建状态转 入就绪状态并进入就绪队列排队。

Βιβλιοθήκη )。 A.线程一旦创建,则立即自动执行 B.线程创建后需要调用start()方法,将线程置于 可运行状态 C.调用线程的start()方法后,线程也不一定立即 执行 D.线程处于可运行状态,意味着它可以被调度 【解析】线程创建后需要调用start()方法,将线程 置于可运行状态。

Java多线程详解——一篇文章搞懂Java多线程

Java多线程详解——一篇文章搞懂Java多线程

Java多线程详解——⼀篇⽂章搞懂Java多线程⽬录1. 基本概念程序(program)程序是为完成特定任务、⽤某种语⾔编写的⼀组指令的集合。

即指⼀段静态的代码(还没有运⾏起来),静态对象。

进程(process)进程是程序的⼀次执⾏过程,也就是说程序运⾏起来了,加载到了内存中,并占⽤了cpu的资源。

这是⼀个动态的过程:有⾃⾝的产⽣、存在和消亡的过程,这也是进程的⽣命周期。

进程是系统资源分配的单位,系统在运⾏时会为每个进程分配不同的内存区域。

线程(thread)进程可进⼀步细化为线程,是⼀个程序内部的执⾏路径。

若⼀个进程同⼀时间并⾏执⾏多个线程,那么这个进程就是⽀持多线程的。

线程是cpu调度和执⾏的单位,每个线程拥有独⽴的运⾏栈和程序计数器(pc),线程切换的开销⼩。

⼀个进程中的多个线程共享相同的内存单元/内存地址空间——》他们从同⼀堆中分配对象,可以访问相同的变量和对象。

这就使得相乘间通信更简便、搞笑。

但索格线程操作共享的系统资源可能就会带来安全隐患(隐患为到底哪个线程操作这个数据,可能⼀个线程正在操作这个数据,有⼀个线程也来操作了这个数据v)。

配合JVM内存结构了解(只做了解即可)class⽂件会通过类加载器加载到内存空间。

其中内存区域中每个线程都会有虚拟机栈和程序计数器。

每个进程都会有⼀个⽅法区和堆,多个线程共享同⼀进程下的⽅法区和堆。

CPU单核和多核的理解单核的CPU是⼀种假的多线程,因为在⼀个时间单元内,也只能执⾏⼀个线程的任务。

同时间段内有多个线程需要CPU去运⾏时,CPU也只能交替去执⾏多个线程中的⼀个线程,但是由于其执⾏速度特别快,因此感觉不出来。

多核的CPU才能更好的发挥多线程的效率。

对于Java应⽤程序java.exe来讲,⾄少会存在三个线程:main()主线程,gc()垃圾回收线程,异常处理线程。

如过发⽣异常时会影响主线程。

Java线程的分类:⽤户线程和守护线程Java的gc()垃圾回收线程就是⼀个守护线程守护线程是⽤来服务⽤户线程的,通过在start()⽅法前调⽤thread.setDaemon(true)可以吧⼀个⽤户线程变成⼀个守护线程。

java 多线程feature 用法

java 多线程feature 用法

Java 多线程特性及用法大纲一. 简介1. 什么是多线程多线程是指在一个程序中同时运行多个线程的并发执行方式。

每个线程都是程序的独立执行单元,它们可以在同一时间内执行不同的任务,使得程序可以更高效地利用多核处理器和资源。

Java是一种支持多线程编程的编程语言,通过其多线程特性,可以实现并发执行不同任务,提高程序的性能和响应能力。

在 Java 中,每个线程都是由 Thread 类或实现了 Runnable 接口的类创建的。

线程可以独立地执行代码,具有自己的程序计数器、栈、寄存器等。

Java提供了多线程编程的支持,使得开发者可以轻松地创建、管理和控制多个线程,以实现并行处理任务,例如同时处理用户输入、后台计算、网络通信等。

2. 为什么使用多线程使用多线程是为了充分利用现代计算机的多核处理器和资源,以提高程序的性能、响应性和效率。

以下是一些使用多线程的主要原因:1. 并行处理:多线程允许程序同时执行多个任务,从而实现并行处理。

这对于需要同时处理多个任务的应用程序非常重要,如图像和视频处理、数据分析等。

2. 提高性能:多线程可以在多核处理器上同时执行不同的任务,从而显著提高应用程序的运行速度和性能。

3. 改善响应性:在单线程应用中,如果一个任务阻塞了,整个程序都会被阻塞。

而多线程允许程序继续响应其他请求,即使某些任务正在等待资源。

4. 任务分解:多线程使得大型任务可以分解成更小的子任务,每个子任务都可以在独立的线程中执行。

这样可以更有效地管理和调度任务。

5. 多任务处理:多线程允许程序同时处理多个任务,比如在一个Web服务器中同时处理多个客户端请求,提供更好的用户体验。

6. 资源共享:多线程允许不同的线程共享同一组资源,如内存、文件、数据库连接等。

这可以减少资源的浪费,并提高资源利用率。

7. 实时性:对于需要实时处理的应用,多线程可以使任务在严格的时间限制内完成,如嵌入式系统、实时图像处理等。

8. 异步编程:多线程可以用于实现异步编程模型,允许程序执行非阻塞的操作,如在网络通信中发送请求同时不阻塞其他操作。

JAVA开发中的多线程编程技术

JAVA开发中的多线程编程技术

JAVA开发中的多线程编程技术Java作为一种广泛应用于企业级应用以及各种工业自动化系统的编程语言,其对于处理多线程并发的问题起到了巨大的作用。

在Java开发过程中,我们经常会遇到需要多线程并发处理的情况,比如高并发的Web服务、大数据处理、图像处理等等。

如何正确合理的使用Java多线程技术是一个非常重要的问题。

本文将详细讲解Java开发中的多线程编程技术。

1.了解Java线程模型Java语言具有完善的线程模型,并提供了Thread类以及Runnable接口,方便程序员进行多线程编程。

在进行Java多线程编程的过程中,必须先理解Java的线程模型,包括线程的创建、使用、同步、互斥、线程间通信等。

同时,也要掌握Java虚拟机的内存结构以及线程调度器的工作原理,这些对多线程编程至关重要。

2.使用synchronized实现线程同步在多线程编程中,需要涉及到许多复杂的操作,如多个线程同时对同一共享数据进行读写操作会造成数据不一致等问题。

这时需要使用synchronized关键字来进行同步。

通过对象锁的机制,保证每个时间段只有一个线程能够访问同一个对象的同步代码块。

当线程进入一个对象的同步块时,将获得该对象的锁,只有等线程退出同步块或发生异常时才会释放锁,其他线程才能进入同步块。

通过synchronized关键字的同步机制能控制线程的读写顺序,使多个线程协同工作,防止数据不一致的问题。

3.使用volatile变量实现线程间通信在多线程编程中,需要进行线程间的通信。

在Java语言中,volatile变量可以用来实现线程间的通信。

当一个变量被声明为volatile变量后,所有线程对这个变量的读写操作都会直接在内存中进行,而不会使用线程的缓存中间值。

这样可以避免数据缓存的不一致,并保证在不同线程中读写的顺序是一致的,从而实现了线程之间的通信。

4.掌握并发包中的工具类Java并发包提供了许多实用的工具类,方便程序员在多线程编程中使用。

Java第七单元练习题Java多线程机制(20210109223217)

Java第七单元练习题Java多线程机制(20210109223217)

7 Java 多线程机制7.1 单项选择题1. 线程调用了sleep ()方法后,该线程将进入( )状态。

A. 可运行状态B. 运行状态C. 阻塞状态D. 终止状态2. 关于java 线程,下面说法错误的是()A. 线程是以CPU为主体的行为B. java 利用线程使整个系统成为异步C. 创建线程的方法有两种:实现Runnable 接口和继承Thread 类D. 新线程一旦被创建,它将自动开始运行3. 在java 中的线程模型包含()A. 一个虚拟处理器B. CPU执行的代码C. 代码操作的数据D. 以上都是4. 在java 语言中,临界区可以是一个语句块,或者是一个方法,并用()关键字标识。

A. synchronizedB. includeC. importD. Thread5. 线程控制方法中,yield()的作用是()A. 返回当前线程的引用B. 使比其低的优先级线程执行C. 强行终止线程D. 只让给同优先级线程运行6. 线程同步中,对象的锁在()情况下持有线程返回A. 当synchronized()语句块执行完后B. 当在synchronized()语句块执行中出现例外( exception )时C. 当持有锁的线程调用该对象的wait()方法时D. 以上都是7. 在以下()情况下,线程就进入可运行状态A. 线程调用了sleep()方法时B. 线程调用了join()方法时C. 线程调用了yield()方法时D. 以上都是8. java 用()机制实现了进程之间的异步执行A. 监视器B. 虚拟机C. 多个CPUD. 异步调用9. Thread 类的方法中,toString() 方法的作用是()A. 只返回线程的名称B. 返回当前线程所属的线程组的名称C. 返回当前线程对象D. 返回线程的名称10. J ava 语言具有许多优点和特点,下列选项中,哪个反映了Java 程序并行机制的特点( )A. 安全性B. 多线程C. 跨平台D. 可移值11. 以下哪个关键字可以用来对对象加互斥锁()A. transientB. synchronizedC. serializeD. static12. 下面关于进程、线程的说法不正确的是( )。

第2章Java多线程应用ppt课件全

第2章Java多线程应用ppt课件全
线程将停止运行。休眠时间的长短由sleep( )方法的参数决定。 • public void run( ) •{ •… • //进行其他处理后 • Thread.sleep(200); //休眠时间以ms为单位 •}
2
• 2. join( ) • join( )方法使当前正在执行的线程进入等待状态(挂起),直至方法join( )所调用
• 2.1 线程和多线程 • 2.2 实例1 Java程序的多线程机制 • 2.3 实例2 Java程序中的多线程实现 • 2.4 实例3 基于Java语言的多线程同步机制 • 2.5实例4 用Java语言实• 线程(thread)是指计算机正在执行的程序中的一个控制流程。线程本 身不是完整程序,没有执行的入口,也没有出口,因此其自身不能自 动运行,而必须栖身于某一进程之中,由进程触发执行。

try //睡眠一随机时间,让出处理器

{Thread.sleep((int)(Math.random()*50));}
及在这段时间内线程能完成的任务,在线程的生命周期中有四种状态,通过对线程进 行操作来改变其状态。 • 1.创建状态 • 创建了一个线程而还没有启动它,则处于创建状态,此时仅是一个空的线程对象,并 不获得应有资源,只有启动后,系统才为它分配资源。处于创建状态的线程可以进行 两种操作:一是通过调用start()方法启动,使其进入可运行状态;二是调用stop()方法, 使其进入消亡状态。 • 2.可运行状态 • 在线程的创建状态中进行启动操作,则此线程进入可运行状态。可运行状态只说明该 线程具备了运行的条件,但并不一定是运行状态,因为在单处理器系统中运行多线程 程序,实际上在每个“时刻”至多有一个线程在运行,而系统中可能有多个线程都处 于运行状态,系统通过快速切换和调度使所有可运行的线程共享处理器,造成宏观上 的多线程并发运行。在可运行状态,线程运行的是线程体,线程体由run()方法规定, 在自己定义的线程类中重写。 • 在可运行状态下可进行多种操作:调用suspend()方法,使线程挂起,从而进入不可运 行状态;调用sleep()方法,使线侱睡眠,从而进入不可运行状态;调用wait()方法,使线 程等待,从而进入不可运行状态;调用yield()方法,使线程退让,使线程把CPU控制权 提前交给同级优先权的其他线程;调用stop()方法,使线程终止,从而进入消亡状态。正 常的情况下是执行完run()方法,使线程结束,进入消亡状态。

Java 2实用教程第4版_第12章_Java多线程机制

Java 2实用教程第4版_第12章_Java多线程机制

2017/4/23
第 16 页
§12.4 线程的常用方法
例 子 6 ( Example12_6.java , ClassRoom.java )中,有两个 线 程 : student 和 teacher, 其 中 student 准备睡一小时后再 开始上课, teacher 在输出 3 句 “上课”后,吵醒休眠的线 程student。运行效果如图12.8。
辽宁省教育软件大赛参赛作品
Java 语言程序设计
第12章 Java多线程机制
配合例子源代码一起使用
大连交通大学 软件学院
导读
主要内容
– – – – – – – – Java中的线程 Thread类与线程的创建 线程的常用方法 线程同步 协调同步的线程 线程联合 GUI线程 计时器线程
重点和难点
– 重点:多线程的概念;如何创建多线程 – 难点:理解多线程机制
2017/4/23
第 3 页
§12.1.2 进程与线程
线程是比进程更小的执行单位,一个进程在其执行过程中,可 以产生多个线程,形成多条执行线索,每条线索,即每个线程 也有它自身的产生、存在和消亡的过程。 线程间可以共享进程中的某些内存单元(包括代码与数据),线 程的中断与恢复可以更加节省系统的开销。
例子8(Example12_8.java, TicketHouse.java )模拟两个人, 张飞和李逵买电影票。售票员只 有两张五元的钱,电影票5元钱一 张。张飞拿二十元一张的人民币 排在李逵的前面买票,李逵拿一 张5元的人民币买票。因此张飞必 须等待(李逵比张飞先买了票)。 程序运行效果如图12.10。
2017/4/23
第 11 页
§12.3.2 使用Thread类例题

java8 多线程方法

java8 多线程方法

java8 多线程方法Java 8 多线程方法是指在Java编程语言中使用多线程的一组方法和技术。

多线程是一种并发编程的方式,可以同时执行多个任务,提高程序的性能和响应能力。

Java 8 引入了一些新的特性和改进,使多线程编程更加简便和高效。

本文将一步一步回答关于Java 8 多线程方法的问题,并讨论如何使用这些方法来实现并发编程。

第一步:介绍Java多线程编程的基本概念和优势。

多线程是指在一个程序中同时执行多个线程的机制。

每个线程都是独立的执行单元,拥有自己的计算和执行路径。

多线程编程可以充分利用计算机的多核处理器和多任务处理能力,提高程序的性能和响应能力。

Java多线程编程提供了几个优势。

首先,它可以将一个复杂的任务分解为多个独立的子任务,并使用多线程同时执行这些子任务,从而提高了程序的执行速度。

其次,多线程可以实现程序的异步执行,即在执行一个线程的同时,其他线程可以继续执行自己的任务,从而实现并发执行。

最后,多线程可以提高程序的响应能力,例如在用户界面上同时处理多个用户操作。

第二步:介绍Java 8 中的新特性和改进。

Java 8在多线程编程方面引入了一些新特性和改进。

其中最重要的特性是Lambda 表达式和函数式接口。

Lambda 表达式是一种简洁且灵活的语法形式,它允许我们以更简洁的方式编写匿名函数。

函数式接口是指只包含一个抽象方法的接口,可以用Lambda 表达式实现该方法。

这些特性使得编写多线程代码更加简单和易于理解。

另一个重要的改进是引入了新的并行流API。

并行流是指在执行操作期间,将大型数据集分成多个小块,并使用多线程同时处理这些小块。

它能够自动管理线程的创建和销毁,并且能够充分利用多核处理器的能力。

并行流API使得编写并发代码更加简单和高效。

第三步:讨论Java 8 多线程方法的使用。

Java 8提供了一些新的多线程方法和类,用于编写并发代码。

其中一些重要的方法和类包括:1. java.util.concurrent 包:这个包包含了一些用于并发编程的工具和类。

Java多线程编程技巧详解

Java多线程编程技巧详解

Java多线程编程技巧详解Java是一种广泛使用的编程语言,而多线程编程则是Java中一个重要的开发领域。

在多线程编程中,开发者需要了解并掌握一定的技巧,以避免线程之间的冲突和死锁等问题。

本文将详细介绍Java多线程编程的常用技巧,帮助开发者轻松掌握多线程编程的精髓。

一、线程的创建与启动1. 继承Thread类创建线程:直接继承Thread类,并覆盖run()方法实现线程主体。

```public class MyThread extends Thread{public void run(){//线程执行体}}MyThread myThread = new MyThread();myThread.start();```2. 实现Runnable接口创建线程:实现Runnable接口,并在类中实例化一个Thread对象。

```public class MyRunnable implements Runnable{public void run(){//线程执行体}}MyRunnable myRunnable = new MyRunnable();Thread thread = new Thread(myRunnable);thread.start();```二、线程的处理与管理1. 同步方法:synchronized关键字用于保护共享数据不被多个线程同时访问。

```public class SynchronizedDemo implements Runnable {private int count;public synchronized void run() {for(int i = 0; i < 5; i++) {System.out.println(Thread.currentThread().getName()+":"+(count++));}}}SynchronizedDemo target = new SynchronizedDemo();Thread thread1 = new Thread(target, "A");Thread thread2 = new Thread(target, "B");thread1.start();thread2.start();```2. 锁对象:使用互斥锁对象来控制线程访问共享资源的方式。

java多线程常用方法

java多线程常用方法

java多线程常用方法Java多线程是Java语言的一项重要特性,它允许程序同时执行多个任务,提高了程序的效率和性能。

在多线程编程中,有一些常用的方法和技巧可以帮助我们更好地控制和管理线程。

本文将介绍一些常用的Java多线程方法。

1. 线程的创建与启动:Java中创建线程有两种方式,一种是继承Thread类,另一种是实现Runnable接口。

继承Thread类需要重写run()方法,实现Runnable接口需要实现run()方法,并将Runnable对象作为参数传递给Thread对象。

然后通过调用start()方法启动线程。

2. 线程的休眠:使用Thread的sleep()方法可以使线程暂停一段时间,单位是毫秒。

这个方法常用于模拟耗时操作,或者在某些情况下需要让线程暂停一段时间。

3. 线程的优先级:每个线程都有一个优先级,用于决定线程在竞争CPU资源时的顺序。

通过Thread类的setPriority()方法可以设置线程的优先级,取值范围是1到10,默认是5。

优先级高的线程有更大的概率先被执行,但并不能保证绝对的执行顺序。

4. 线程的加入:使用Thread的join()方法可以让一个线程等待另一个线程执行完毕。

在调用join()方法时,当前线程会暂停执行,直到被调用的线程执行完毕才会继续执行。

5. 线程的中断:使用Thread的interrupt()方法可以中断一个线程。

当调用interrupt()方法时,被中断的线程会收到一个中断信号,可以根据需要做出相应的处理。

6. 线程的同步:在多线程编程中,经常会遇到多个线程同时访问共享资源的情况。

为了保证数据的一致性和避免竞态条件,可以使用synchronized关键字来实现线程的同步。

synchronized关键字可以修饰方法或代码块,用于保证同一时间只有一个线程执行被修饰的代码。

7. 线程的通信:当多个线程之间需要进行协作时,可以使用wait()、notify()和notifyAll()三个方法来实现线程的通信。

08-Java多线程

08-Java多线程
wait(),notify()不属于Thread类,而是属于 Object基础类,每个对象都有对象锁。
8.4.5 线程的同步
wait导致当前线程等待,直到其他线程调用此对象的 notify() 方法。 wait只能由持有对象锁的线程来调用。 notify唤醒在此对象监视器上等待的一个线程。如果 有多个线程都在此对象上等待,则会选择唤醒其中一个线 程(随机)。直到当前的线程放弃此对象上的锁,才能继续 执行被唤醒的线程。
8.1.1 线程与多线程
多线程是指程序中包含多条执行路径。
线程是程序执行中的一个执行路径(子任务)。
大多数程序只有一条执行路线,但现实世界中 的很多过程都是同时发生的,对应这种情况, 可编写有多条执行路径的程序,使得程序能够
同时执行多个任务(并行)。
多线程机制使得程序的多个子任务能够“同时” 执行。
8.2 线程的状态与生命周期
(3)就绪状态 处于就绪状态的线程被调度并获得CPU资源后 即进运行状态,每一个Thread类及其子类的对象 都有一个run()方法,当线程对象被调度执行的时 候,它将自动调用本对象的run()方法。 注意:线程的操作应该写到run()方法中。
8.2 线程的状态与生命周期
8.2 线程的状态与生命周期
Java线程的生命周期中一共有五个状态:
①新建状态
④阻塞状态
②就绪状态
⑤终止状态
③运行状态
下图是五个状态的状态转换示意图:
新建状态 就绪状态 运行状态 终止状态
阻塞状态
8.2 线程的状态与生命周期
(1)新建状态 即创建一个新的线程对象(new Thread)。当一个 线程处于创建状态时,系统不为它分配资源。 Thread myThread=new Thread( ); (2)就绪状态 Java通过start方法启动处于新建状态的线程对象, 使其进入就绪状态。处于就绪状态的线程已经具备了运 行条件,将进入线程队列等待系统为其分配CPU,一旦 获得了CPU,线程就进入运行状态,并调用自己的run方 法。 myThread. start();

java校招面试题目(3篇)

java校招面试题目(3篇)

第1篇第一部分:基础知识1. Java基本概念(1)请解释Java中的面向对象编程(OOP)的特点。

解析:面向对象编程的特点包括封装、继承和多态。

封装是指将数据和对数据的操作封装在一个类中;继承是指允许一个类继承另一个类的属性和方法;多态是指同一个方法在不同对象上表现出不同的行为。

(2)简述Java中的四种访问控制符及其作用范围。

解析:Java中的四种访问控制符分别是public、protected、默认(不写)和private。

public可以访问任何类;protected可以在同一个包内和子类中访问;默认访问(不写)只能在同一个包内访问;private只能在类内部访问。

2. Java基本数据类型(1)请列出Java中的基本数据类型,并说明其特点和取值范围。

解析:Java中的基本数据类型包括byte、short、int、long、float、double、char和boolean。

byte和short为有符号整数类型,取值范围分别为-128到127和-32,768到32,767;int为基本整型,取值范围为-2,147,483,648到2,147,483,647;long为长整型,取值范围为-9,223,372,036,854,775,808到9,223,372,036,854,775,807;float和double为浮点数类型,取值范围分别为-3.4E38到3.4E38和-1.8E308到1.8E308;char为字符类型,取值范围为0到65,535;boolean为布尔类型,取值为true或false。

(2)简述Java中的自动装箱和拆箱。

解析:自动装箱是指将基本数据类型自动转换为包装类型(如int自动转换为Integer);自动拆箱是指将包装类型自动转换为基本数据类型。

在装箱和拆箱过程中,如果数据类型不匹配,会抛出ClassCastException异常。

3. Java关键字(1)请解释Java中的关键字final、static和synchronized。

浅谈Java的多线程机制

浅谈Java的多线程机制
专踵 褫 褒
T C N L G N A K T E H o o Y A DM_ E R
V0. 7 No4 2 0 11 , 。. 01
浅谈, v 的多线程机 制 J a a
王海荣 张银玲
黄 淮 学院计算机 科 学 系 河南驻 马店 430 600
摘 要 :为 了最 大 限度 地 利 用C U资 源 ,a a P Jv 提供 了 多线 程 编 程 机 制 。 当 某一 线程 的 处理 不 需要 占用C U. 和I , P  ̄只 / O
1 前 盲 .
了多线程技术 , 以比C + 更健壮。 所 和c + 多线程带来 的更大的好 处是更好 的交互性能和实时控制性能。 当然实时控 制性能还取 决于系统本身(NXWidw , c t h , U I , no s i o 等)在开发难易程度 和 Ma n s 性能上都 比单 线程要好 。传统 编程环境通 常是 单线程 的 , 而
参 考 文献 :
[] 4 王莲 芬 , 许树 柏. 次 分析 法 引论 【 . 国人 民 大 学 出版 社 , 层 M】 中
O MBO 等 资 源打 交道 时 , 需要 占用C U资源 的 其 它 线程 有 机会 获得 C U资 源。 E IS 让 P P 关键 词 : 线程 多 C U 同 步机 制 P
di 03 6/in10 — 5 4 0 0 40 5 o: . 9js . 6 85 . 1. .1 1 9 .s 0 2 0
源的其它线程有机会获得C U P 资源 。从根本上说 , 这就是多线 程编程的最终 目的。
2 .多线 程
多线程 编程环境用方便 的模 型隐藏C U P 在任务 切换 间的 事实 。 型允许假装成有 多个可用的C U 模 P 。为 了建立另一个任 务, 编程人员要求另 一个 虚拟C U, P 指示它开始用某个数 据组 执行某个 程序段 。下面我们来建立线程。

妙用Java多线程机制实现多个时区时钟显示

妙用Java多线程机制实现多个时区时钟显示

妙用Java多线程机制实现多个时区时钟显示【摘要】在许多公共场合下,需要提供时钟显示,如机场、火车站、汽车站、酒店等,特别是一些需要接待外宾的场所,处理显示本地区时间以外还必须显示其他时区时间。

本文使用java多线程机制实现多个时区时钟的显示。

【关键词】类;对象;继承;接口;多线程机制1.问题描述java多线程机制实现了异步执行环境,线程间的通信简单有效,每个线程彼此独立执行,一个程序可以同时使用多个线程来完成不同任务。

依此可实现在窗口中显示北京时间、格林尼治时间、夏威夷时间和东京时区四个时区的时钟。

2.问题实现定义从jpanel控件继承生成clock类并实现runnable接口。

在其构造方法中创建线程,通过其中的pain方法画出当前时区的时钟信息。

在线程的run方法中检测当前cpu上线程是否为自身并让自身线程睡眠1000个时间单位,在主类drawingclock的方法中创建四个clock对象并加入到主类的frame控件中,从而实现四个时区的时钟同时显示。

3.实现程序代码import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.util.*;public class drawingclock {jframe frame;clock panell,panel2,panel3,panel4;public static void main(string args[]) { drawingclock dc=new drawingclock();dc.go();}public void go() {frame=new jframe(”时钟”);frame.getcontentpane().setlayout(null);panell=new clock(160,150,”北京时间”,0);//线程1画北京时间时钟frame.getcontentpane().add(panell);panel2=new clock(400,150,”格林威治时间”,-7);////线程2画北京时间时钟frame.getcontentpane().add(panel2);panel3=new clock(160,450,”东京时间”,1);//线程3画北京时间时钟frame.getcontentpane().add(panel3);panel4 = new clock(400,450,”夏威夷时间”,-10);//线程4画北京时间时钟frame.getcontentpane().add(panel4);frame.setdefaultcloseoperation(jframe.exit_on_close);frame.setsize(600, 650);frame.setvisible(true);}}class clock extends jpanel implements runnable {thread thr1=new thread(this);string text;int z;graphics graphics;date currentdate=new date(); //获取当前日期信息string lastdate=currentdate.tostring(); //获取当前日期信息的字符串形式int xcenter , ycenter; // 时钟的中心坐标值int radius=100;// 时钟的半径void drawcircle(){graphics.drawarc(xcenter-radius, ycenter-radius,radius*2, radius*2,0,360);for(int i=1;icalendar nowcal= calendar.getinstance();s=nowcal.get(calendar.second);//获取当前的秒值m=nowcal.get(calendar.minute);//获取当前的分钟值h=nowcal.get(calendar.hour);//获取当前的小时值h+=z;nowcal.set(calendar.hour,h);today+=nowcal.gettime().tostring();//获取当前秒针、分针和时针的末端坐标值xs=(int)(math.cos(s * math.pi / 30 - math.pi / 2) *(radius-10) + xcenter);ys=(int)(math.sin(s * math.pi / 30 - math.pi / 2) *(radius-10) + ycenter);xm=(int)(math.cos(m * math.pi / 30 - math.pi / 2) * (radius-40) + xcenter);ym=(int)(math.sin(m * math.pi / 30 - math.pi / 2) * (radius-40) + ycenter);xh=(int)(math.cos((h*30+m/2) * math.pi / 180 - math.pi / 2) * (radius-60)+ xcenter);yh=(int)(math.sin((h*30+m/2) * math.pi / 180 - math.pi / 2) * (radius-60)+ ycenter);//清除界面,显示日期信息,并画秒针、分针和时针g.clearrect(xcenter-100, ycenter+radius+2,200,30);g.drawstring(today, xcenter-100, ycenter+radius+20);g.drawline(xcenter, ycenter, xs, ys);g.drawline(xcenter, ycenter, xm, ym);g.drawline(xcenter, ycenter, xh, yh);}public void run() {thread me = thread.currentthread();while ((thr1== me)) {//若是本线程则休眠1000个单位后刷新try {thread.currentthread().sleep(1000);//当前线程休眠1秒} catch (interruptedexception e) {}repaint();//重画时钟}}public clock(int x,int y,string s,int zone){z=zone;text=s;xcenter=x;ycenter=y;setsize(600,800);thr1.start();//启动线程}}4.结语本程序能准确显示四个时区的时间信息,但界面美观程度不够。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

public class Example9_9 { public static void main(String args[]) { A a=new A(); a.student.start(); a.teacher.start(); } } class A implements Runnable { Thread student,teacher; A() { teacher=new Thread(this); student=new Thread(this); teacher.setName("王教授 王教授"); 王教授 student.setName("张三 张三"); 张三 }
程序是一段静态的代码,它是应用软件执行的蓝本。 进程是程序的一次动态执行过程,它对应了从代码加 载、执行至执行完毕的一个完整过程,这个过程也是 进程本身从产生、发展至消亡的过程。 线程是比进程更小的执行单位,一个进程在其执行过程 中,可以产生多个线程,形成多条执行线索,每条线 索,即每个线程也有它自身的产生、存在和消亡的过 程,也是一个动态的概念。
线程的优先级
线程在创建时,继承了父类的优先级。线程创建 后,可以在任何时刻调用setPriority方法改变线程 的优先级。优先级为1~10,Thread定义了其中3 个常数:
MAX_PRIORITY最大优先级(值为10); MIN_PRIORITY最小优先级(值为1); NORM_PRIORITY默认优先级(值为5)
public void run() { if(Thread.currentThread()==student) { try{ System.out.println(student.getName()+"正在睡觉,不听 正在睡觉, 正在睡觉 课"); Thread.sleep(1000*60*60); } catch(InterruptedException e) { System.out.println(student.getName()+"被老师叫醒了 被老师叫醒了"); 被老师叫醒了 } System.out.println(student.getName()+"开始听课 开始听课"); 开始听课 } else if(Thread.currentThread()==teacher) { for(int i=1;i<=3;i++) { System.out.println("上课 上课!"); 上课 try{ Thread.sleep(500); } catch(InterruptedException e){} } student.interrupt(); //吵醒 吵醒student 吵醒 } } }
线程同步
Java提供了多线程机制,通过多线程的并发运行 可以提高系统资源利用率,改善系统性能。但在有 些情况下,一个线程必须和其他线程合作才能共同 完成任务。线程可以共享内存,利用这个特点可以 在线程之间传递信息。 在Java中,实现同步操作的方法是在共享内存变 量的方法前加synchronized修饰符。在程序运行过 程中,如果某一线程调用经synchronized修饰的方 法,在该线程结束此方法的运行之前,其他所有线 程都不能运行该方法,只有等该线程完成此方法的 运行后,其他线程才能y运行该方法。
线程的常用 方法
start() :线程调用该方法将启动线程,使之从新 建状态进入就绪队列排队,一旦轮到它来享用 CPU资源时,就可以脱离创建它的线程独立开始 自己的生命周期了。 run():线程对象被调度之后所执行的操作,由系 : 统自动调用,用户程序不得引用。系统的Thread 类中,run()方法没有具体内容,所以用户程序需 要创建自己的Thread类的子类,并重写run()方法 来覆盖原来的run()方法。当run方法执行完毕,线 程就变成死亡状态。
public static void main(String args[]) { Thread1 threadA = new Thread1("A ", 50); Thread1 threadB = new Thread1("B ", 100); threadA.start(); threadB.start(); } }
返回true,否则返回false。 注意:一个已经运行的线程在没有进入死亡状态 时,不要再给线程分配实体。
currentThread():是Thread类中的类方法, :
可以用类名调用,该方法返回当前正在使用CPU 资源的线程。
interrupt():用来“吵醒”休眠的线程。 :
例4:有两个线程:student和teacher,其中 student准备睡一小时后再开始上课,teacher在输 出3句“上课”后,吵醒休眠的线程student.
例3:线程的优先级演示。
class Race extends Thread { public static void main(String args[]) { Race[] runner=new Race[4]; for(int i=0;i<4;i++) runner[i]=new Race( ); for(int i=0;i<4;i++) runner[i].start( ); runner[1].setPriority(MIN_PRIORITY); runner[3].setPriority(MAX_PRIORITY); } public void run( ) { for(int i=0; i<1000000; i++); System.out.println(getName()+"线程的优先级是 线程的优先级是 "+getPriority()+"已计算完毕 已计算完毕!"); 已计算完毕 } }
sleep(int millsecond):线程占有CPU期间, :
执行sleep方法来使自己放弃CPU资源,休眠一段 时间。如果线程在休眠时被打断,JVM就抛出 InterruptedException异常。因此,必须在 try~catch语句块中调用sleep方法。
isAlive():线程处于运行状态时, isAlive()方法 :
线程的创建
创建线程的方式有两种: 通过创建Thread类的子类来实现; 通过实现Runnable接口的类来实现。
Thread的子类创建线程 设计Thread的子类,重写父类的run方法 用Thread类或子类创建线程对象 使用start方法启动线程 当JVM将CPU使用权切换给线程时,自动执行run 方法。
使用Runnable接口实现多线程 用继承Thread类的子类或实现Runable接口的类 来创建线程无本质区别,但由于Java不支持多重 继承,所以如果一个类必须继承另一个非Thread 类,此时要实现多线程只能通过实现Runnable接 口的方式。 通过Runnable接口实现多线程的方法: Runnable 设计一个实现Runnable接口的类,重写run方 法; 以该类的对象为参数建立Thread类的对象; 调用Thread类对象的start方法启动线程,将执 行权转交到run方法。
多线程和多任务:多线程和多任务是两个既有联系又有区 别的概念,多任务是针对操作系统而言的,代表着操作系 统可以同时执行的程序个数;多线程是针对一个程序而言 的,代表着一个程序内部可以同时执行的线程个数,而每 个线程可以完成不同的任务。例如Java推出的HotJava浏 览器,你可以一边浏览网页一边下载新网页,可以同时显 示动画和播放音乐。 主线程:当JVM加载代码,发现main方法之后,就会启 动一个线程,这个线程称作“主线程”,该线程负责执行 main方法。如果main方法中没有创建其他的线程,那么 当main方法执行完最后一个语句,JVM就会结束我们的 Java应用程序。如果main方法中又创建了其他线程,那 么JVM就要在主线程和其他线程之间轮流切换,保证每个 线程都有机会使用CPU资源,main方法即使执行完最后 的语句,JVM也不会结束我们的程序,JVM一直要等到程 序中的所有线程都结束之后,才结束我们的Java应用程 序。
public static void main(String args[]) { Thread2 threadA = new Thread2("A ", 50); Thread2 threadB = new Thread2("B ", 100); Thread threadC=new Thread(threadA); Thread threadD=new Thread(threadB); threadC.start(); threadD.start(); } }
例2:将上例改成使用Runnable接口来实现多线程。
class Thread2 implements Runnable { String s; int m, count=0; Thread2(String ss, int mm) { s=ss; m=mm; } public void run() { try { while (true) { System.out.print(s); Thread.sleep(m); if (++count >= 20) break; } System.out.println(s+"has finished !"); } catch (InterruptedException e) {return;} }
class Lefthand extends Thread { public void run() { for(int i=1;i<=9;i++) { System.out.println("我是左手线程 我是左手线程"); 我是左手线程 } } } class Righthand extends Thread { public void run() { for(int i=1;i<=9;i++) { System.out.println("我是右手线程 我是右手线程"); 我是右手线程 } } }
相关文档
最新文档