Java中的线程续

原创 2004年10月04日 02:12:00

在线程切换的时候不涉及CPU寄存器的保存以及进程状态的保护。

线程实现整个环境的异步模式,但有时需要同步(两个线程同时读写同一数据)。

线程通过sleep或者yeild主动放弃CPU的占用。

Run()方法几乎肯定含有某种形式的循环——它们会一直持续到线程不再需要为止。因此,为了中断并退出这个循环,必须规定特定的条件。否则,除非外部发出对线程的stop或者destroy调用,它会永远运行下去,直到程序结束。

堵塞(挂起)状态Blocked可能是由下列五方面的原因造成:

1,  调用sleep(),使线程进入睡眠状态;

2,  ruspend()暂停了线程的执行。除非线程收到resume()消息,否则不会返回可运行状态;

3,  wait()暂停了线程执行,除非线程收到nofify()或者notifyAll()

4,  线程正在等候一些IO(输入输出)操作完成。

5,  线程试图调用另一个对象的“同步”方法,但哪个对象处于锁定状态,暂时无法使用。

    

Java没有监视器这个类,Java提供的解决方法是为每一个对象都有其独立的监视器,当一个线程进入一个具有同步特性的函数(sychronized)时,其余线程将不操作同一个对象的同步函数,换句话说,同步机制已经融合进了Java语言当中。

无论sleep还是suspend都不会在自己被调用的时候解除缩定,必须等到时间到了或调用了自己的resume()方法。

Wait()在挂起内部调用的方法时,会解释对象的锁定,并且能够自由的退出wait(),因为一个notity()可强行使时间流逝(当wait有参数时)。

Wait()notify()同属Object()类,而sleep,suspend以及resume同属Thread类。因此,专门进行线程处理的东西也就成为通用基础类(Object)的一部分。因此,我们可将一个wait()置入任何同步方法内部,无论在哪个类里是否进行涉及线程的处理。

 <?xml:namespace prefix = o />

线程池:

池化资源:在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多的资源,在Java中更是如此,虚拟机将试图跟踪没一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象的创建与销毁。

一般一个线程池至少包含下列组成部分。

线程管理器(ThreadPoolManager):用于创建线程池,销毁线程池,添加新任务。

工作线程(WorkThread):线程池中线程。

任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。它规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等。

任务队列:用于存放没有处理的任务。提供一种缓冲机制。

 

守护线程:myThread.setDaemon(true);

    守护线程是一个后台运行的线程,从属于生成它的线程,所以当生成守护线程的线程结束时,此守护线程会随之消失。相对与守护线程的是用户线程,它有自己的生命周期,不依赖创建它的线程,它可以在创建它的线程结束后继续执行。

 

网络编程--JAVA之多线程下载后续:断点续存

这篇博客就是接在我上篇博客网络编程–JAVA之多线程下载的基础上来实现的。首先,我来说一下断点续存能解决啥问题: 假如当我们在进行MP4下载时,如果突然出现人为的中断或者意外的中断,那么当我们再次...
  • qq_16293247
  • qq_16293247
  • 2016年06月02日 14:14
  • 1105

Android 短视频采集之视频断点拍摄、回删功能的实现方法总结

本文介绍了实现类似美拍、秒拍的段短视频断点录制功能的两种方案,并给出了其优劣比较。...
  • u011495684
  • u011495684
  • 2017年12月27日 11:59
  • 90

java四种线程的使用

Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 new...
  • w_wensan
  • w_wensan
  • 2017年04月12日 14:31
  • 527

java中线程的基本操作!

java中建立线程可以有两种方式,分别是继承Thread类和实现Runnable接口. 1.继承Thread public class MyThread extends Thread{ ...
  • kkkkkxiaofei
  • kkkkkxiaofei
  • 2013年10月11日 16:44
  • 1871

关于Java多线程中this和CurrentThread()的区别

代码如下: public class hello extends Thread {   public hello(){ System.out.println("Thread.currentThr...
  • weixin_36974505
  • weixin_36974505
  • 2017年02月16日 11:50
  • 472

Swing框架之Renderer(三)

前面文章提到过,许多复合数据型组件不仅仅需要展现数据,还需要编辑数据。比如JTable的某些单元格可能需要编辑,JComboBox除了选择外还可以直接编辑数据,有些JTree有时也需要直接编辑节点。S...
  • chosen0ne
  • chosen0ne
  • 2009年08月16日 21:38
  • 2061

关于Java的线程问题总结

不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程...
  • g552092947
  • g552092947
  • 2016年08月12日 22:25
  • 980

Java并发编程(一)线程定义、状态和属性

一 、线程和进程 1. 什么是线程和进程的区别: 线程是指程序在执行过程中,能够执行程序代码的一个执行单元。在java语言中,线程有四种状态:运行 、就绪、挂起和结束。 进程是指一段正在执行...
  • itachi85
  • itachi85
  • 2015年10月05日 15:30
  • 6186

java中的线程创建和使用

Java中实现多线程有两种途径:继承Thread类或者实现Runnable接口。Runnable是接口,建议用接口的方式生成线程,因为接口可以实现多继承,况且Runnable只有一个run方法,很适合...
  • liranke
  • liranke
  • 2010年03月28日 13:09
  • 7511

Java线程:什么是线程

一 基本概念   多任务:同一时刻运行多个程序的能力。每一个任务称为一个线程。可以同时运行一个以上线程的程序称为多线程程序。   Java编写程序都运行在在Java虚拟机(JVM)中,在JVM的内...
  • arredando
  • arredando
  • 2017年08月04日 14:47
  • 1614
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java中的线程续
举报原因:
原因补充:

(最多只允许输入30个字)