免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1207 | 回复: 0
打印 上一主题 下一主题

Java多线程学习笔记1 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-12-02 10:41 |只看该作者 |倒序浏览

                一:线程的生命周期
  1.创建状态
   创建一个线程而还没有启动它,则处于创建状态,此时仅是一个空得线程对象,并不获得应有得资源,只有启动后,系统才分配资源给它。
   此时可进行两种操作:一是通过调用start()方法启动,使其进入可运行状态,二是调用stop()方法,使其进入消亡状态
  2.可运行状态
    线程的创建状态中进行启动操作,则此线程进入可运行状态。可运行只说明它具备了运行的条件。
    在单处理系统中运行多线程程序,实际上每一时刻至多一个线程在运行,而系统中可能有多个线程都处于可运行状态,系统通过快速切换和调度所有可运行的线程共享处理器,造成宏观上得多线程并发。
    在可运行状态,线程运行得是线程体,线程体由run()方法规定,在自己定义得线程类中重写。
    此时可进行得操作:一是suspend(),使线程挂起;二是sleep(),使线程睡眠;三是wait(),使线程等待,以上三种均使线程进入不可运行状态。另外还可调用yield(),使线程退让,把CPU控制权提前交给同级优先权得其他线程;调用stop(),是线程终止进入消亡状态。
  3.不可运行状态
    不可运行状态由可运行状态转换而来,除了以上几种情况,另外一种是:如果一个线程是和IO操作有关得,则在执行IO操作指令时,线程会受到阻塞,此时也进入到不可运行状态。
    当线程处于此状态,可过下面途径恢复到可运行状态:通过sleep()方法进入的,在过了指定得睡眠时间后自动恢复;由于I/O的,在外设完成操作后自动恢复;通过suspend()的,通过resume()方法恢复;通过wait()方法的,通过调用notify()或者notifyAll()方法恢复。
    在不可运行状态,也可调用stop()使其进入消亡状态。
  4.消亡状态
   到此状态的线程其生命周期就结束了,不能转到其他状态。
   有两种情况使线程进入消亡状态:从可运行状态执行完run()方法,自然消亡;从任何其他一种状态调用stop()方法
二:线程得建立和使用
   1.使用Thread的子类创建线程
    通过对Thread类得继承派生一个子类,再由这个子类生成对象实现线程的创建
    参考步骤:
    从Thread类派生一个子类,下面代码实现了一个MyThread的子类
    class MyThread extends Thread{
         public void run(){}
    }
    重写run()方法,一个Thread类的内部结构使得总是执行线程本身的run方法
    生成类对象,创建线程
    MyThread myFirstThread=new MyThread();
    调用start方法,使之可运行状态
     MyFirstThread.start();
public class Main {
    public static void main(String[] args) {
        MyThread First=new MyThread("ZXP");//创建线程ZXP
        MyThread Second=new MyThread("ZXP@");//创建线程ZXP@
/谁先启动并不代表它会先执行,不信的人可以都运行几遍
        First.start();//启动线程ZXP
        Second.start();//启动线程ZXP@
    }
}
class MyThread extends Thread{
    public MyThread(String str){
        super(str);//为线程起名字
    }
    @Override
    public void run(){
        for(int i=0;i
   2.直接使用Thread类创建线程
  使用Thread类得构造方法Thread(Runnable target)创建线程对象,target必须是一个具体的对象,该对象成为线程得目标对象,创建目标对象的类要实现Runnable接口。
   当线程调用start方法时,一旦轮到它用CPU,目标对象就会自动调用run方法。
import java.awt.*;
  import java.util.Date;
  import java.util.logging.Level;
  import java.util.logging.Logger;
  public class Clock extends java.applet.Applet implements Runnable{
    Thread clockThread;
    @Override
    public void start(){//applet必须实现的方法,
        if(clockThread==null){
            clockThread=new Thread(this,"Clock");//创建线程对象
            clockThread.start();//启动线程,使其进入可运行状态
        }
    }
    @SuppressWarnings("static-access")
    public void run() {     //创建目标对象的类实现Runnable接口,方法run
        while(clockThread!=null){
            repaint();//重新绘制,自动调用后面的paint方法
            try {
                clockThread.sleep(1000);
            } catch (InterruptedException ex) {
                Logger.getLogger(Clock.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
    @Override
    public void paint(Graphics g){//绘制方法
        Font f=new Font("TimesRoman",Font.BOLD,24);//设置字体
        g.setFont(f);
        Date now=new Date();//获取当前系统时间
        g.drawString(now.getHours()+":"+now.getMinutes()+":"+now.getSeconds(),20,40);  //绘制文本,该方法在屏幕上显示字符串对象      
    }
}
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/87164/showart_1675099.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP