`
liu1028701143
  • 浏览: 35817 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

多线程技术博客二

 
阅读更多

多线程技术博客二

1、睡眠

Thread.sleep(long millis)和Thread.sleep(long millis, int nanos)静态方法强制当前正在执行的线程休眠(暂停执行),以“减慢线程”。当线程睡眠时,它入睡在某个地方,在苏醒之前不会返回到可运行状态。当睡眠时间到期,则返回到可运行状态。

线程睡眠的原因:线程执行太快,或者需要强制进入下一轮,因为Java规范不保证合理的轮换。

睡眠的实现:调用静态方法。


睡眠的位置:为了让其他线程有机会执行,可以将Thread.sleep()的调用放线程run()之内。这样才能保证该线程执行过程中会睡眠。

注意:

1、线程睡眠是帮助所有线程获得运行机会的最好方法。

2、线程睡眠到期自动苏醒,并返回到可运行状态,不是运行状态。sleep()中指定的时间是线程不会运行的最短时间。因此,sleep()方法不能保证该线程睡眠到期后就开始执行。

3、sleep()是静态方法,只能控制当前正在运行的线程。

2、线程的优先级和线程让步yield()

线程的让步是通过Thread.yield()来实现的。yield()方法的作用是:暂停当前正在执行的线程对象,并执行其他线程。

要理解yield(),必须了解线程的优先级的概念。线程总是存在优先级,优先级范围在1~10之间。JVM线程调度程序是基于优先级的抢先调度机制。在大多数情况下,当前运行的线程优先级将大于或等于线程池中任何线程的优先级。但这仅仅是大多数情况。

注意:当设计多线程应用程序的时候,一定不要依赖于线程的优先级。因为线程调度优先级操作是没有保障的,只能把线程优先级作用作为一种提高程序效率的方法,但是要保证程序不依赖这种操作。

设置线程的优先级:线程默认的优先级是创建它的执行线程的优先级。可以通过setPriority(int newPriority)更改线程的优先级。例如:

线程默认优先级是5,Thread类中有三个常量,定义线程优先级范围:

static int MAX_PRIORITY
线程可以具有的最高优先级。


static int MIN_PRIORITY
线程可以具有的最低优先级。

static int NORM_PRIORITY
分配给线程的默认优先级。

3、Thread.yield()方法

Thread.yield()方法作用是:暂停当前正在执行的线程对象,并执行其他线程。

yield()应该做的是让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。因此,使用yield()的目的是让相同优先级的线程之间能适当的轮转执行。但是,实际中无法保证yield()达到让步目的,因为让步的线程还有可能被线程调度程序再次选中。

结论:yield()从未导致线程转到等待/睡眠/阻塞状态。在大多数情况下,yield()将导致线程从运行状态转到可运行状态,但有可能没有效果。


4、join()方法

Thread的非静态方法join()让一个线程B“加入”到另外一个线程A的尾部。在A执行完毕之前,B不能工作。例如:

Thread t = new MyThread();
t.start();
t.join();

5、线程安全类


6、线程死锁

死锁对Java程序来说,是很复杂的,也很难发现问题。当两个线程被阻塞,每个线程在等待另一个线程时就发生死锁。

还是看一个比较直观的死锁例子:

假设read()方法由一个线程启动,write()方法由另外一个线程启动。读线程将拥有resourceA锁,写线程将拥有resourceB锁,两者都坚持等待的话就出现死锁。

实际上,上面这个例子发生死锁的概率很小。因为在代码内的某个点,CPU必须从读线程切换到写线程,所以,死锁基本上不能发生。

分享到:
评论

相关推荐

    VC下ADO开发实践与多线程

    标题中的“VC下ADO开发实践与多线程”揭示了本书的核心内容,即在Microsoft Visual C++(简称VC++)环境下,如何运用ActiveX Data Objects(ADO)进行数据库操作,并结合多线程技术来实现高效的并发处理。...

    多线程雷电游戏

    标题中的“多线程雷电游戏”指的是使用多线程技术开发的一款类似雷电风格的射击游戏。在计算机编程中,多线程是同时执行多个任务的技术,这使得程序能够更高效地利用处理器资源,特别是在游戏开发中,它可以实现游戏...

    多线程下载工具

    标题中的“多线程下载工具”指的是一个利用多线程技术来提高文件下载速度的应用程序。在计算机编程中,多线程是指在一个程序内同时执行多个独立的线程,每个线程负责不同的任务,比如在下载场景中,一个线程负责处理...

    在BCB中使用多线程 ( 转载 )_BladeW的博客-CSDN博客1

    在BCB(Borland C++ Builder)中使用多线程是一种...总的来说,BCB通过TThread类为开发者提供了一种方便的方式来利用多线程技术,从而提高程序的响应速度和效率。正确地管理和同步线程是保证程序稳定性和安全性的关键。

    多线程 队列利用

    多线程是计算机程序设计中的一个技术,允许一个应用程序同时执行多个独立的执行线程。这些线程可以并行运行,提高程序的执行效率,特别是在多核处理器系统中。多线程可以用来实现任务调度、数据处理、用户界面响应等...

    vb.bet多线程问题(转载)

    标题中的“vb.bet多线程问题”指出讨论的核心是关于VB.NET编程语言中的多线程技术。在.NET框架中,多线程是程序设计的一个重要方面,它允许应用程序同时执行多个任务,提高效率和响应性。VB.NET作为.NET框架的一部分...

    Qt多线程经典例子

    在IT领域,多线程是实现高性能和高并发应用程序的关键技术。Qt库,作为一个跨平台的应用程序开发框架,提供了强大的多线程支持。本篇我们将深入探讨“Qt多线程经典例子”,通过学习实例,理解如何在Qt环境中有效利用...

    c++多线程实例1

    在C++编程中,多线程技术是一种提升程序并发执行能力的重要手段,它允许程序同时执行多个任务。本文将深入探讨C++中的多线程实例,以“c++多线程实例1”为主题,结合提供的博客链接...

    libevent多线程

    8. **流程图**:链接中的博客文章(http://blog.csdn.net/i_am_jojo/article/details/7587838)提供了一个关于多线程Libevent应用的流程图,可以辅助理解多线程在Libevent中的工作原理和步骤。 9. **Client与Server...

    java多线程笔记全手打

    本笔记全面涵盖了多线程的学习,包括基础理论和实践代码,旨在帮助开发者深入理解并掌握Java多线程技术。 一、线程基础知识 线程是操作系统分配CPU时间的基本单位,一个进程中可以包含多个线程。Java通过`Thread`类...

    使用多线程的NIO构建简易的多线程java服务器

    在Java编程中,使用非阻塞I/O(Non-blocking Input/Output,NIO)和多线程技术可以构建高效、可扩展的服务器。本篇我们将深入探讨如何利用NIO和多线程来创建一个简单的Java服务器。首先,我们需要理解NIO的基本概念...

    多线程

    在计算机编程领域,多线程是一种并发执行任务的技术,它允许多个子任务在同一时间运行,从而提高了程序的效率和响应速度。特别是在处理CPU密集型或I/O密集型任务时,多线程能够充分利用现代多核处理器的资源,提高...

    Qt5多线程技术集锦,源码案例

    在本文中,我们将深入探讨Qt5的多线程技术,主要基于提供的资源文件名,如`share`、`copyFile`、`qProgressDialogDemo`、`czyBlog`、`QtThread.pro`和`qProgressBarDemo`。这些文件名暗示了在实际应用中涉及的多线程...

    JAVA多线程实现数据库之间的数据互导、连接池、及多表插入数据库功能

    在Java编程中,多线程技术是实现高效并发处理的关键,尤其在大数据量处理和分布式系统中。本主题聚焦于如何利用多线程实现在不同数据库间的数据互导,以及结合连接池技术来优化数据库操作,并实现多表插入功能。我们...

    多线程编程技术开发资料.pdf

    2. **学习资源**:除了文档和书籍,如《Java并发编程实战》、《C++多线程编程》等,互联网上有大量的教程、博客和论坛可以作为学习多线程编程的补充资源。 综上所述,多线程编程技术是现代软件开发中不可或缺的一...

    powerbuilder多线程示例

    在现代软件开发中,多线程技术是提升程序性能和用户体验的重要手段。本示例将深入探讨如何在PowerBuilder中实现多线程,以充分利用系统资源,提高程序的并发处理能力。 在PowerBuilder中,我们可以使用内置的Thread...

    java oracle,多线程,综合应用示例

    总的来说,这个"java oracle,多线程,综合应用示例"涵盖了Java编程中的多线程技术、与Oracle数据库的交互,以及可能涉及到的项目管理和开发工具。通过深入学习和实践,开发者不仅可以提升自己的技术水平,还能更好地...

    QT 多线程同步QSemaphore

    QT框架中的多线程同步是实现高效并发编程的关键技术,其中`QSemaphore`是一个重要的工具。`QSemaphore`是Qt的并发类库中的一员,它主要用于控制对共享资源的访问,实现线程间的同步和互斥。理解并熟练运用`...

    多任务多线程断点下载demo

    在实现多任务多线程断点下载时,主要涉及以下几个关键技术点: 1. **多线程**:使用多个线程同时下载不同的部分,以提高下载速度。Android的`AsyncTask`或`Thread`可以用来创建并运行这些线程。 2. **连接管理**:...

Global site tag (gtag.js) - Google Analytics