知识大全 超线程多核心下Java多线程编程技术分析[3]

Posted

篇首语:行动是治愈恐惧的良药,而犹豫拖延将不断滋养恐惧。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 超线程多核心下Java多线程编程技术分析[3]相关的知识,希望对你有一定的参考价值。

超线程多核心下Java多线程编程技术分析[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    这个程序的不同运行将产生不同的结果 这种不确定性来源于两个方面 在循环中有一个随机的暂停 更为重要的是 因为线程执行时间没法保证 这是一个关键的原则 JVM将根据它自己的时间表运行这些进程(虚拟机一般支持尽可能快地运行这些线程 但是没法保证何时运行一个给定线程) 对于每个线程可以使一个优先级与之相关联以确保关键线程被JVM处理在次要的线程之前

    启动一个线程的第二种方法是使用一个实现Runnable接口的类 这个接口也定义在java lang中 这个Runnable接口指定一个run()方法 然后该方法成为线程的主函数 类似于前面的代码

    现在 Java程序的一般风格是支持继承的接口 通过使用接口 一个类在后面仍然能够继承(子类化) 如果必要的话(例如 如果该类要在后面作为一个applet使用的话 就会发生这种情况)

    三 线程的含义

    在采用多线程技术增强性能的同时 它也增加了程序内部运行的复杂性 这种复杂性主要是由线程之间的交互引起的 熟悉这些问题是很重要的 因为随着越来越多的核心芯片加入到Intel处理器中 要使用的线程数目也将相应地增长 如果在创建多线程程序时不能很好地理解这些问题 那么是调试时将很难发现错误 因此 让我们先看一下这些问题及其解决办法

    等待另一个线程完成 假定我们有一个整型数组要进行处理 我们可以遍历这个数组 每次一个整数并执行相应的操作 或 更高效地 我们可以建立多个线程 这样以来让每个线程处理数组的一部分 假定我们在开始下一步之前必须等待所有的线程结束 为了暂时同步线程之间的活动 这些线程使用了join()方法 它使得一个线程等待另一个线程的完成 加入的线程(线程B)等待被加入的线程(线程A)的完成 在join()中的一个可选的超时值使得线程B可以继续处理其它工作 如果线程A在给定的时间帧内还没有终止的话 这个问题将触及到线程的核心复杂性 等待线程的问题 下面我们将讨论这个问题

    在锁定对象上等待 假定我们编写一个航空公司座位分配系统 在开发这种大型的程序时 为每个连接到该软件的用户分配一个线程是很经常的 如一个线程对应一个机票销售员(在很大的系统中 情况并非总是如此) 如果有两个用户同时想分配同一个座位 就会出现问题 除非采取特殊的措施 否则一个线程将分配该座位而另一个线程将会在做相同的事情 两个用户都会认为他们在这趟航班上拥有一个分配的位子

    为了避免两个线程同时修改一样的数据项 我们让一个线程在修改数据前锁定数据项 用这种方法 当第二个线程开始作修改时 它将等待到第一个线程释放锁为止 当这种发生时 线程将会看到座位已被分配 而对于座位分配的请求就会失败 两个线程竞争分配座位的问题也就是著名的竞争条件问题 而当竞争发生时有可能导致系统的泄漏 为此 最好的办法就是锁定任何代码 该代码存取一个可由多个线程共同存取的变量

    在Java中存在好几种锁选择 其中最为常用的是使用同步机制 当一个方法的签名包含同步时 在任何给定时间只有一个线程能够执行这个方法 然后 当该方法完成执行时 对该方法的锁定即被解除

    就是一个方法 在这种方法中每次只运行一个线程 这种锁机制就打破了上面所描述的竞争条件

    使用同步是处理线程间交互的几种方法中的一种 J SE 中添加了若干方便的方法来锁定对象 大多数这些方法可以在包java util concurrent locks中找到 一旦你熟悉了Java线程 就应该对它进行详细的研究

    在锁机制解决了竞争条件的同时 它们也带来了新的复杂性 在这种情况下 最困难的问题就是死锁 假定线程A在等待线程B 并且线程B在等待线程A 那么这两个线程将永远被锁定 这正是术语死锁的意义 死锁问题可能很难判定 并且必须相当小心以确保在线程之间没有这种依赖性

cha138/Article/program/Java/gj/201311/27728

相关参考

知识大全 超线程多核心下Java多线程编程技术分析[1]

超线程多核心下Java多线程编程技术分析[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 超线程多核心下Java多线程编程技术分析[2]

超线程多核心下Java多线程编程技术分析[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 超线程多核心下Java多线程编程分析

超线程多核心下Java多线程编程分析  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一Java环

知识大全 浅析Java多线程编程中的高级技术

浅析Java多线程编程中的高级技术  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb

知识大全 Java多线程编程基础之线程和多线程

Java多线程编程基础之线程和多线程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  随着计算机技

知识大全 Java多线程编程基础之线程对象

Java多线程编程基础之线程对象  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs

知识大全 多线程编程您不知道的5件事

   多线程编程向来不容易但很少有Java?开发人员能够忽视多线程编程和支持它的Java平台库我们临时学习线程在需要时向我们的工具箱添加新的技巧和技术以这种方式构建和运行

知识大全 Java多线程编程

Java多线程编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  作者natrium    一理

知识大全 Java多线程编程的常见陷阱

Java多线程编程的常见陷阱  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在构造函数中启动线程

知识大全 Java 5.0多线程编程

Java5.0多线程编程  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java自年面世以来得到