扩展阅读
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.security类keystore的类成员方法: getdefaulttype定义及介绍
  • 新年第一天,让我们讨论一下未来一年JAVA的发展趋势! 个人认为,JAVA将主要朝ERP和JAVA手机方面发展!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getclasspath定义及介绍
  • 我想学Java,但不知道Java的实用的开发工具有那些,Java主要用在哪些方面,EJB到底是什么东西??
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javaserializedobjectmimetype定义及介绍
  • redhat7.3下,java程序打印中文直接用java命令执行正常,用crontab执行java命令为乱码
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javafilelistflavor定义及介绍
  • 各位学java的朋友,学java的未来是什么,你们学java都用来开发什么项目啊!来者给分!!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getvmname定义及介绍
  • 请问java程序中的import为什么有的用java.….*,而有的又用java.….…,有什么区别吗?
  •  
    当前位置:  编程语言>java/jsp

    Java中多线程相关类Thread介绍

     
        发布时间:2013-6-30  


        本文导语: 1. 线程状态线程有四种状态,任何一个线程肯定处于这四种状态中的一种:1) 产生(New):线程对象已经产生,但尚未被启动,所以无法执行。如通过new产生了一个线程对象后没对它调用start()函数之前。2) 可...


    1. 线程状态

    线程有四种状态,任何一个线程肯定处于这四种状态中的一种:

    1)    产生(New):线程对象已经产生,但尚未被启动,所以无法执行。如通过new产生了一个线程对象后没对它调用start()函数之前。

    2)    可执行(Runnable):每个支持多线程系统都有一个排程器,排程器会从线程池中选择一个线程并启动它。当一个线程处于可执行状态时,表示它可能正处于线程池中等待排排程器启动它;也可能它已正在执行。如执行了一个线程对象的start()方法后,线程就处于可执行状态,但显而易见的是此时线程不一定正在执行中。

    3)    死亡(Dead):当一个线程正常结束,它便处于死亡状态。如一个线程的run()函数执行完毕后线程就进入死亡状态。

    4)    停滞(Blocked):当一个线程处于停滞状态时,系统排程器就会忽略它,不对它进行排程。当处于停滞状态的线程重新回到可执行状态时,它有可能重新执行。如通过对一个线程调用wait()函数后,线程就进入停滞状态,只有当两次对该线程调用notifynotifyAll后它才能两次回到可执行状态。

    2. Thread下的常用函数函数

    2.1   suspend()、resume()

    1)    通过suspend()函数,可使线程进入停滞状态。通过suspend()使线程进入停滞状态后,除非收到resume()消息,否则该线程不会变回可执行状态。

    2)    当调用suspend()函数后,线程不会释放它的“标志”。


    2.2     sleep()

    1)    sleep ()函数有一个参数,通过参数可使线程在指定的时间内进入停滞状态,当指定的时间过后,线程则自动进入可执行状态。

    2)    当调用sleep ()函数后,线程不会释放它的“锁标志”。


    2.3    yield()

    1)    通过yield ()函数,可使线程进入可执行状态,排程器从可执行状态的线程中重新进行排程。所以调用了yield()的函数也有可能马上被执行。

    2)    当调用yield ()函数后,线程不会释放它的“锁标志”。


    2.4    sleep()和yield()的区别

    1)    sleep()使当前线程进入停滞状态,所以执行sleep()的线程在指定的时间内肯定不会执行;yield()只是使当前线程重新回到可执行状态,所以执行yield()的线程有可能在进入到可执行状态后马上又被执行。

    2)    sleep()可使优先级低的线程得到执行的机会,当然也可以让同优先级和高优先级的线程有执行的机会;yield()只能使同优先级的线程有执行

    的机会。

    2.5    join()

    使调用join()的线程执行完毕后才能执行其它线程,在一定意义上,它可以实现同步的功能。

    3. class Object下常用的线程函数

    wait()、notify()和notifyall()这三个函数由java.lang.object类提供,用于协调多个线程对共享数据的存取。

    3.1 wait()、notify()和notifyAll()

    1) wait()函数有两种形式:第一种形式接受一个毫秒值,用于在指定时间长度内暂停线程,使线程进入停滞状态。第二种形式为不带参数,代表waite()在notify()或notifyAll()之前会持续停滞。

    2) 当对一个对象执行notify()时,会从线程等待池中移走该任意一个线程,并把它放到锁标志等待池中;当对一个对象执行notifyAll()时,会从线程等待池中移走所有该对象的所有线程,并把它们放到锁标志等待池中。

    3) 当调用wait()后,线程会释放掉它所占有的“锁标志”,从而使线程所在对象中的其它synchronized数据可被别的线程使用。

    3.2 wait()、notify()和synchronized

    waite() 和notify()因为会对对象的“锁标志”进行操作,所以它们必须在synchronized函数或synchronized block中进行调用。如果在non-synchronized函数或non-synchronized block中进行调用,虽然能编译通过,但在运行时会发生 IllegalMonitorStateException的java中多线程的问题 iis7站长之家

    4. wait()、notify()、notifyAll()和suspend()、resume()、sleep()的讨论

    4.1 这两组函数的区别

    1) wait()使当前线程进入停滞状态时,还会释放当前线程所占有的“锁标志”,从而使线程对象中的synchronized资源可被对象中别的线程使用;而suspend()和sleep()使当前线程进入停滞状态时不会释放当前线程所占有的“锁标志”。

    2) 一组函数必须在synchronized函数或synchronized block中调用,否则在运行时会产生错误;而后一组函数可以non-synchronized函数和synchronized block中调用。

    4.2 这两组函数的取舍

    Java2已不建议使用后一组函数。因为在调用wait()时不会释放当前线程所取得的“锁标志”,这样很容易造成“死锁”。


    • 本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
      本站(WWW.)站内文章除注明原创外,均为转载,整理或搜集自网络.欢迎任何形式的转载,转载请注明出处.
      转载请注明:文章转载自:[169IT-IT技术资讯]
      本文标题:Java中多线程相关类Thread介绍
    相关文章推荐:
  • java命名空间java.lang类thread的类成员方法: thread定义及介绍
  • 关于运行JAVA exception in thread "mian"
  • java命名空间java.lang类thread的类成员方法: max_priority定义及介绍
  • Java Thread
  • java命名空间java.lang枚举thread.state的类成员方法: new定义及介绍
  • 我用javac编译HelloWorldapp.java无错误,但运行时出现该错误:Exception in thread "main" java.lang.NoClassDefFoundError: helloworldapp
  • java命名空间java.lang枚举thread.state的类成员方法: terminated定义及介绍
  • 这个错误是什么原因Exception in thread "main" java.lang.NoClassDefFoundError:
  • java命名空间java.lang类thread的类成员方法: getdefaultuncaughtexceptionhandler定义及介绍
  • 菜鸟求救!(exception in thread "main" java.lang.NoClassDefFoundError)
  • java命名空间java.lang类thread的类成员方法: getstate定义及介绍
  • 怎么一直说Exception in thread "main" java.lang.NoclassDefFoundErorr?
  • java命名空间java.lang枚举thread.state的类成员方法: runnable定义及介绍
  • Exception in thread "main" java.lang.NoClassDefFoundError: Hello/class
  • java命名空间java.lang枚举thread.state的类成员方法: timed_waiting定义及介绍
  • java thread start()和run()方法简析
  • java命名空间java.lang枚举thread.state的类成员方法: waiting定义及介绍
  • Exception in thread "main" java.lang.NoClassDefFoundError:d:javahelloworld是怎么回事
  • java命名空间java.lang.management类managementfactory的类成员方法: thread_mxbean_name定义及介绍
  • java命令执行类文件时不在bin的目录下出现Exception in thread "main" java.lang.NoClassDefFoundError:
  • java命名空间java.lang类thread的类成员方法: run定义及介绍
  • java程序运行时错误Exception in thread "main" java.lang.NoClassDefFoundError: myjava


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3