`
wx1568520008
  • 浏览: 20430 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

浅谈Java多线程

 
阅读更多

 

1、进程和线程

 

一个程序就是一个进程,而一个程序中的多个任务则被称为线程。

进程是表示资源分配的基本单位,线程是进程中执行运算的最小单位,亦是调度运行的基本单位。

举个例子:

打开你的计算机上的任务管理器,会显示出当前机器的所有进程,QQ,360等,当QQ运行时,就有很多子任务在同时运行。比如,当你边打字发送表情,边好友视频时这些不同的功能都可以同时运行,其中每一项任务都可以理解成“线程”在工作。

2、使用多线程

在Java的JDK开发包中,已经自带了对多线程技术的支持,可以很方便地进行多线程编程。实现多线程编程的方式有两种,一种是继承 Thread 类,另一种是实现 Runnable 接口。使用继承 Thread 类创建线程,最大的局限就是不能多继承,所以为了支持多继承,完全可以实现 Runnable 接口的方式。需要说明的是,这两种方式在工作时的性质都是一样的,没有本质的区别。如下所示:

2.1、继承 Thread 类

cd31b98d30017d02f227645247074090c42.jpg

2.2、实现 Runnable 接口

d106e9c8a275df2a1893b3b2adf2708c2fe.jpg

Thread.java 类中的start()方法通知“线程规划器”此线程已经准备就绪,等待调用线程对象的run()方法。这个过程其实就是让系统安排一个时间来调用 Thread 中的 run() 方法,也就是使线程得到运行,多线程是异步的,线程在代码中启动的顺序不是线程被调用的顺序。

3、实例变量与线程安全

自定义线程类中的实例变量针对其他线程可以有共享与不共享之分。当每个线程都有各自的实例变量时,就是变量不共享。共享数据的情况就是多个线程可以访问同一个变量。来看下面的示例:

59d890a3ef7e0d210b7f7fcd79a6f2a907b.jpg

以上代码定义了一个线程类,实现count变量减一的效果。运行类Runjava代码如下:

20016b65ba286dfe5379848c3c27a4f861e.jpg

打印结果如下:线程C 计算 count = 3线程B 计算 count = 3线程A 计算 count = 2线程D 计算 count = 1线程E 计算 count = 0线程C,B的打印结果都是3,说明C和B同时对count进行了处理,产生了“非线程安全问题”。而我们想要的得到的打印结果却不是重复的,而是依次递减的。

在某些JVM中,i--的操作要分成如下3步:

取得原有变量的值。计算i-1。对i进行赋值。

在这三个步骤中,如果有多个线程同时访问,那么一定会出现非线程安全问题。

解决方法就是使用 synchronized 同步关键字 使各个线程排队执行run()方法。修改后的run()方法:

16b208661b9afa92719f68e2715f81d0518.jpg

打印结果:线程B 计算 count = 4线程C 计算 count = 3线程A 计算 count = 2线程E 计算 count = 1线程D 计算 count = 0关于System.out.println()方法先来看System.out.println()方法源码:

6e6376d06c4a9545add03abf3d61827b669.jpg

虽然println()方法内部使用 synchronized 关键字,但如下所示的代码在执行时还是有可能出现非线程安全问题的。

System.out.println("线程"+Thread.currentThread().getName()+" 计算 count = "+count--);原因在于println()方法内部同步,但 i-- 操作却是在进入 println()之前发生的,所以有发生非线程安全问题的概率。

4、多线程方法

4.1、currentThread()方法

currentThread()方法可返回代码段正在被哪个线程调用的信息。

Thread.currentThread().getName()

4.2、isAlive()方法

方法isAlive()的功能是判断当前的线程是否处于活动状态。

thread.isAlive();

4.3、sleep()方法

方法sleep()的作用是在指定的毫秒数内让当前"正在执行的线程"休眠(暂停执行)。这个"正在执行的线程"是指this.currentThread()返回的线程。

Thread.sleep();

4.4、getId()方法

getId()方法的作用是取得线程的唯一标识。

thread.getId();

 

后言:文章内容,来自博客园:像风一样。因找不到原文章,所以没附上地址,打上原创标签,请见谅。

转载于:https://my.oschina.net/u/4167465/blog/3079360

分享到:
评论

相关推荐

    浅谈Java多线程编程.pdf

    "浅谈Java多线程编程" 从标题和描述可以看出,这篇文章的主题是讨论Java多线程编程的相关知识点。 多线程编程的概念 Java语言的一个重要特点是支持多线程机制,这使得Java程序可以支持多程序并发执行,从而提高...

    浅谈java多线程编程

    【Java多线程编程】是Java开发中不可或缺的一部分,它允许程序同时执行多个任务,从而提高效率和响应速度。本文将深入探讨Java多线程的优缺点、创建方式以及线程安全与同步机制。 **一、多线程的优缺点** 1. **...

    浅谈Java多线程处理中Future的妙用(附源码)

    "浅谈Java多线程处理中Future的妙用" 在Java多线程处理中,Future是一个非常重要的概念,它可以帮助我们更好地处理并发任务。Future是一个未来对象,里面保存着线程处理结果,它像一个提货凭证,拿着它你可以随时去...

    浅谈Java多线程实现及同步互斥通讯

    浅谈Java多线程实现及同步互斥通讯 多线程实现方式: Java中的多线程实现方式共有两种:通过继承Thread类和通过实现Runnable接口。下面我们来详细了解这两种方式: 1. 通过继承Thread类来实现多线程: 通过继承...

    浅谈java多线程wait,notify

    _java多线程wait、notify机制详解_ 在Java多线程编程中,wait和notify是两个非常重要的机制,用于实现线程之间的通信和同步。在本文中,我们将通过示例代码详细介绍Java多线程wait和notify的使用,帮助读者更好地...

    浅谈Java的多线程机制.pdf

    "浅谈Java的多线程机制" 本文主要讨论了Java语言中的多线程机制,旨在提高应用程序的性能和实时控制性能。 Java提供了多线程编程模型,使得在一个程序中可以同时执行多个小任务,从而最大限度地利用CPU资源。 首先...

    浅谈JAVA中多线程的实现.zip

    了解并熟练掌握这些Java多线程的概念和实践技巧,对于编写高性能、并发友好的Java应用至关重要。在实际开发中,合理地使用多线程可以提高程序的运行效率,但也需要考虑到线程安全、资源竞争等问题,避免出现死锁、...

    浅谈java多线程 join方法以及优先级方法

    总结起来,Java多线程中的`join()`方法用于线程间的同步,确保一个线程在另一个线程完成后再继续执行。线程的优先级则影响线程调度,但不是绝对的执行顺序保证。理解并熟练运用这些概念对于编写高效的并发程序至关...

    浅谈JAVA语言的多线程技术.pdf

    浅谈JAVA语言的多线程技术 一、多线程技术的概述 JAVA语言作为一种面向对象的编程语言,它具有平台独立性、安全性、网络化、多线程、面向对象等特点。其线程机制在实践中广泛应用而受到编程者的极大关心。本文就...

    浅谈Java多线程的优点及代码示例

    Java多线程是一种编程技术,允许程序同时执行多个任务,从而提高资源利用率、简化程序设计并加快程序响应速度。在Java中,多线程通过创建线程对象来实现,每个线程代表程序中的一个独立执行流。 **资源利用率更好**...

    浅谈Java多线程编程中Boolean常量的同步问题

    在Java多线程编程中,确保线程安全是非常重要的,尤其是当涉及到共享数据时。本文主要讨论了一个在处理Boolean常量时可能遇到的同步问题。在Java中,`synchronized`关键字用于控制并发访问,保证同一时刻只有一个...

    浅谈JAVA中多线程的实现.pdf

    在Java开发中,多线程技术是一项重要的编程技能,它允许同时运行两个或多个部分,这些部分称为线程,每个线程可以处理不同的任务。这不仅能够提高程序的执行效率,还能改善用户体验,因为多线程可以实现程序的异步...

    浅谈Java软件测试.pdf

    3. Java语言在软件行业中的应用:Java语言由于其简单、面向对象、安全、健壮、可移植、多线程等特点,在中国的软件行业和金融行业中得到了广泛应用。文中也提到了一些基于Java技术的自动化测试工具,例如JUnit、...

    浅谈多线程_让程序更高效的运行

    在Java中,多线程是通过创建并运行多个线程来实现的,每个线程代表着进程中的一条独立控制流。Java线程是抢占式的,意味着线程的执行是由操作系统调度,根据优先级和当前状态决定。 【进程】是一个程序或应用的实例...

    浅谈JAVA语言.pdf

    "浅谈JAVA语言.pdf" 本文将从Java语言的起源开始,分析Java语言与传统语言的差异,并阐述Java语言为什么能够成为世界上最流行的编程语言的原因。同时,本文还将结合Java语言的特点与技术的发展,探讨Java语言在编译...

    浅谈Java线程的生命周期——北大青鸟佳音旗舰.docx

    在Java编程中,线程是程序执行的最小单元,它们允许并发处理多个任务,提高程序的效率。本文将深入探讨Java线程的生命周期,包括创建、启动、结束以及线程的协作和调度。 首先,创建Java线程有两种主要方式:直接...

    浅谈Java获得多线程的返回结果方式(3种)

    Java 多线程返回结果方式详解 在 Java 中,获取多线程的返回结果是一件复杂的事情。今天,我们将介绍三种方式来获取多线程的返回结果。 第一种方法:使用 Runnable 实现类 在这个方法中,我们可以在 Runnable 的...

    浅谈Java线程Thread之interrupt中断解析

    Java线程Thread之interrupt中断机制是Java多线程编程中的一种重要机制。通过调用Thread.interrupt()方法,可以设置线程的中断状态位,线程会不时地检测这个中断标示位,以判断线程是否应该被中断。interrupt机制并...

    浅谈java集合框架

    ### 浅谈Java集合框架 Java集合框架是一个用于存储、操作和检索一组对象的强大工具集。集合框架的设计目的是为了提供一套高效且灵活的数据结构来满足不同的应用需求。本篇文章将详细探讨Java集合框架中的一些核心...

Global site tag (gtag.js) - Google Analytics