荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Peter (小飞侠), 信区: Program
标  题: Java多线程
发信站: BBS 荔园晨风站 (Thu Jan 21 22:44:08 1999), 转信


  Java的多线程特性是它的一大优点。多线程是相对单线程而言的,
单线程是指任何时候只能有一个运行程序,其他程序必须等待;而有了
多线程这个特性,Java可以支持多个程序并发执行。Java的多线程功
能被封闭在线程类中。

    线程的创建和调用
    有两种方法可以创建线程。第一种方法是通过继承类"Thread"来
创建线程类。如:
    class aaa extends Thread{   //aaa是类的名称
      public void run(){
      //run是整个线程类代码的入口,与C语言中的main类似
      //源程序
      }
    }
    此时调用格式如下:
    aaa test=new aaa();    //test是类aaa的一个实例
    test.start();
    //start是线程类的成员函数,将产生一个新的线程,这个线程自
动调用Run
    第二种方法是建立一个具有Runnable接口的类。如:
    class aaa implements Runnable{
      public void run(){
      //源程序
      }
    }
    此时调用格式如下:
    aaa test=new aaa();
    new Thread(test).start();
                        //通过Thread创建一个新的线程。线程类
的变量及成员函数
                        变量:
    MAX_PRIORITY        规定了线程优先级所能设置的最大值
    MIN_PRIORITY        规定了线程优先级所能设置的最小值
    NORM_PRIORITY       规定了优先级的缺省值
    成员函数:
    acitveCount()       返回该线程组中当前激活线程的数目
    checkAccess()       检测当前线程是否可以被修改
    countStackFrames()  返回该线程堆栈框的数目
    currentThread()     返回当前正在执行的线程对象
    destroy()           终止一个线程,不清除其他相关内容
    dumpStack()         一个调试过程,输出当前线程的堆栈使用
情况
    enumerate(Thread[]) 将所有该线程组中激活的线程复制到一个
特殊的数组中去
    getName()           返回线程的名称
    getPriority()       返回线程的优先级
    getTheradGroup()    返回线程组
    interrupt()         向一个线程发送一个中断信息
    interrrupted()      检查该线程是否被中断
    isAlive()           检查线程是否处于激活状态
    isDaemon()          检查该线程是否常驻内存
    isInterrupted()     检查另一个线程是否被中断
    join(long)          在long毫秒中等待线程中止
    join(long,int)      在long毫秒,int纳秒内等待线程中止
    join()              永远等待线程的中止
    resume()            重新开始执行该线程
    run()               整个代码的入口,与C语言中的main类似
    setDaemon()         将该线程设置为Daemon(常驻内存)
    setName(String)     设置线程的名称
    setPriority(int)    设置线程的优先级
    sleep(long)         使一个线程休眠long毫秒
    sleep(long,int)     使一个线程休眠long毫秒,int纳秒
    start()             启动一个线程,这个线程将自动调用run函
数。在新线程
                        开始执行的同时,调用start的那个线程将
立即返回执行
                        主程序
    stop()              终止一个线程
    stop(Throwable)     终止一个线程,当该线程是由Throwable类
继承过来的
    suspend()           暂停线程的执行
    toString()          返回一个字符串,包括线程的名称、优先
级和线程组
    yield()             使线程放弃对CPU的控制,使其它处于等待
状态的线程运行
    同步及安全设定
    当两个函数需要使用同一个资源时,不能同时执行。Java提供了
同步设定的功能。每个类把自己代码中不能与其它程序同时运行的部
分进行同步设定。同步设定的功能是通知Jaa 哪些代码段已被加锁,
这些加锁的代码段只能单独运行。有以下几种方法进行同步设定:
    1.将函数设置为同步方式
    public synchronized void fun1(){
     //源代码
    }
    public synchronized void fun2(){
    //源代码
    }
    对于上述被设置为同步方式的函数,只有在获得资源后才可运行
。对于每一个类来说,只有一个资源。任何时刻都只有一个获得资源
的程序在运行,函数在获得资源前处于等待状态。

    2.在调用函数中说明此函数需要被同步
    synchronized(res){ res.fun1();}
    synchronized(res){ res.fun2();}
    在上述例子中,fun1与fun2只能获得res的资源后才能运行。函数
调用结束后,资源才被释放,从而使其他等待这个资源的线程得以运行

    线程中的变量可以设置为安全变量,当线程使用这个变量时,其它
线程不能改变这个变量的值。这个功能使用编译器更易于实现代码优
化。如果不使用这种设置,编译器很难将一个线程中已被修改的变量
区分开来。这种安全变量的定义方式如下:
    threadsafe ine ttt;
    //threadsafe是线程安全变量的类型,ttt是变量名
    我们常用的static变量,就是线程安全变量的典型例子

--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.1.3]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店