Java 多线程使用要点分析

多线程细节问题

sleep方法和wait方法的异同点?

相同点:

让线程处于冻结状态.

不同点:

sleep必须指定时间
wait可以指定时间也可以不指定时间

sleep时间到,线程处于临时阻塞状态或者运行态
wait如果没有时间,必须通过notify或者notifyAll唤醒

sleep不一定非要定义在同步中
wait必须定义在同步中

都定义在同步中时
sleep放执行权,不放锁
wait放执行权,放锁

syschronized(obj)
 {
   wait();// 0 1 2
   code...
 }
 syschronized(obj)
 {
  notifyAll();// 3
  code...
 }

线程如何停止

stop方法

stop方法已经过时,看描述发现,有其他解决方案.
线程结束:就是让线程任务代码执行完,run方法结束
run方法如何结束?
通过定义循环

注意:万一线程在任务中处于冻结状态他还能判断标记吗?
所谓的中断状态并不是停止线程.
interrupt中断状态使
如果目标线程等待很长时间,则应使用 interrupt 方法来中断该等待
所谓的中断并不是停止线程。
interrupt的功能是 将线程的冻结状态清除,让线程恢复到的运行状态(让线程重新具备cpu的执行资格)。
因为时强制性的所以会有异常InterruptedException发生,可以在catch中捕获异常,
在异常处理中,改变标记让循环结束,让run方法结束。

守护线程

守护线程:也可以理解为后台线程,之前创建的都是前台线程。
只要线程调用了setDaemon(true);就可以把线程标记为守护线程。
前台后台线程运行时都是一样的,获取CPU的执行权执行。
只有结束的时候有些不同。
前台线程要通过run方法结束,线程结束。
后台线程也可以通过run方法结束,线程结束,还有另一种情况,
当进程中所有的前台线程都结束了,这时无论后台线程处于什么样的状态,都会结束,从而进程会结束。
进程结束依赖的都是前台线程。

线程优先级

线程的优先级:用数字标识的,1-10
其中默认的初始优先级时5 最明显的三个优先级 1,5,10。
setPriority(Thread.MAX_PRIORITY);

线程组

线程组:ThreadGroup:可以通过Thread的构造函数明确新线程对象所属的线程组。
线程组的好处,可以对多个同组线程,进行统一的操作。
默认都属于main线程组。

匿名内部类

Runnable rn = new Runnable() {
  public void run() {
  }
};

//上述代码等价于

class Anomymous implements Runnable {
  public void run() {
  }
}
Runnable rn = new Anomymous();

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • java多线程和并发包入门示例

    一.java多线程基本入门java多线程编程还是比较重要的,在实际业务开发中经常要遇到这个问题. java多线程,传统创建线程的方式有两种. 1.继承自Thread类,覆写run方法. 2.实现Runnable接口,实现run方法. 启动线程的方法都是调用start方法,真正执行调用的是run方法.参考代码如下: 复制代码 代码如下: package com.jack.thread; /** * 线程简单演示例子程序 *  * @author pinefantasy * @since 2013-

  • java基本教程之java线程等待与java唤醒线程 java多线程教程

    本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long timeout)和notify()4. wait() 和 notifyAll()5. 为什么notify(), wait()等函数定义在Object中,而不是Thread中 wait(), notify(), notifyAll()等方法介绍在Object.java中,定义了wait(), notify()

  • Java多线程下载的实现方法

    复制代码 代码如下: package cn.me.test; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; /** * 多线程下载 * 1:使用RandomAccessFile在任意的位置写入数据. * 2:需要计算第一个线程下载的数据量,可以平均分配.如果不够平均时, *    则直接最后一个线程处理相对较少

  • java基本教程之Thread中start()和run()的区别 java多线程教程

    Thread类包含start()和run()方法,它们的区别是什么?本章将对此作出解答.本章内容包括:start() 和 run()的区别说明start() 和 run()的区别示例start() 和 run()相关源码(基于JDK1.7.0_40) start() 和 run()的区别说明start() : 它的作用是启动一个新线程,新线程会执行相应的run()方法.start()不能被重复调用.run()   : run()就和普通的成员方法一样,可以被重复调用.单独调用run()的话,会在

  • java向多线程中传递参数的三种方法详细介绍

    在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果.但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别.由于线程的运行和结束是不可预料的,因此,在传递和返回数据时就无法象函数一样通过函数参数和return语句来返回数据.本文就以上原因介绍了几种用于向线程传递数据的方法,在下一篇文章中将介绍从线程中返回数据的方法. 欲先取之,必先予之.一般在使用线程时都需要有一些初始化数据,然后线程利用这些数据进行加工处理,并

  • Java多线程实现异步调用的方法

    在JAVA平台,实现异步调用的角色有如下三个角色:调用者 提货单   真实数据 一个调用者在调用耗时操作,不能立即返回数据时,先返回一个提货单.然后在过一断时间后凭提货单来获取真正的数据. 去蛋糕店买蛋糕,不需要等蛋糕做出来(假设现做要很长时间),只需要领个提货单就可以了(去干别的事情),等到蛋糕做好了,再拿提货单取蛋糕就可以了. public class Main { public static void main(String[] args) { System.out.println("ma

  • Java多线程的用法详解

    1.创建线程 在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例.Thread构造函数: public Thread( );  public Thread(Runnable target);  public Thread(String name);  public Thread(Runnable target

  • 15个高级Java多线程面试题及回答

    Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分.如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题.在投资银行业务中多线程和并发是一个非常受欢迎的话题,特别是电子交易发展方面相关的.他们会问面试者很多令人混淆的Java线程问题.面试官只是想确信面试者有足够的Java线程与并发方面的知识,因为候选人中有很多只浮于表面.用于直接面向市场交易的高容量和低延时的电子交易系统在本质上是并发的.下面这些是我在不同时间不同地点喜欢问的Jav

  • java基本教程之join方法详解 java多线程教程

    本章涉及到的内容包括:1. join()介绍2. join()源码分析(基于JDK1.7.0_40)3. join()示例 1. join()介绍join() 定义在Thread.java中.join() 的作用:让"主线程"等待"子线程"结束之后才能继续运行.这句话可能有点晦涩,我们还是通过例子去理解: 复制代码 代码如下: // 主线程public class Father extends Thread {    public void run() {     

  • Java中对AtomicInteger和int值在多线程下递增操作的测试

    Java针对多线程下的数值安全计数器设计了一些类,这些类叫做原子类,其中一部分如下: java.util.concurrent.atomic.AtomicBoolean; java.util.concurrent.atomic.AtomicInteger; java.util.concurrent.atomic.AtomicLong; java.util.concurrent.atomic.AtomicReference; 下面是一个对比  AtomicInteger 与 普通 int 值在多线

随机推荐