博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA线程控制
阅读量:7028 次
发布时间:2019-06-28

本文共 2564 字,大约阅读时间需要 8 分钟。

  可以通过线程的方法进行基本的线程控制,除了已知的start、run、sleep方法外还有isAlive、currentThread、interrupt方法。

isAlive:该方法用来测试线程是否处于活动状态。线程由start方法启动后,直至被终止之间的任何时刻都处于Alive状态。当处于新建状态和死亡状态时,该方法返回false。

currentThread:该方法是Thread类的的类方法,返回正在使用CPU资源的线程。

interrupt:当线程处于休眠状态时,一个占有CPU资源的线程可以让休眠的线程调用interrupt方法唤醒自己,导致休眠的线程发生InterruptedException异常结束休眠,重新排队等待CPU资源。

class A implements Runnable{    Thread student,teacher;    A(){        teacher=new Thread(this,"王教授");        student=new Thread(this,"张三");    }        public void run(){        if(Thread.currentThread()==student){            try{                System.out.println(student.getName()+"正在睡觉,不听课");                Thread.sleep(1000*60*60);            }catch(InterruptedException e){                System.out.println(student.getName()+"被老师叫醒了");            }        }        else if(Thread.currentThread()==teacher){            for(int i=1;i<=3;i++){                System.out.println("上课!");            }try{                Thread.sleep(500);            }catch(InterruptedException e){}            student.interrupt();        }    }}public class BasicControlThread{    public static void main(String args[]){        A a=new A();        a.student.start();        a.teacher.start();    }}

 

此外还有stop和join方法

stop():通过调用线程的实例方法stop()来终止线程,终止后即进入死亡状态,不能再被调度。

join():一个线程在占有CPU资源期间,可以让其他线程调用join()方法和本线程联合。当前线程等待调用该方法线程结束后,再重新排队等待CPU资源,以便恢复执行。

class TV{    float price;    String name;    TV(String name,float price){        this.price=price;        this.name=name;    }}class ThreadJoin implements Runnable{    TV tv;    Thread customer,tvMaker;    ThreadJoin(){        customer=new Thread(this,"顾客");        tvMaker=new Thread(this,"电视制造商");    }    public void run(){        if(Thread.currentThread()==customer){            System.out.println(customer.getName()+"等"+tvMaker.getName()+"生产电视机");            try{                tvMaker.join();//线程customer开始等待tvMaker结束            }catch(InterruptedException e){ }            System.out.println(customer.getName()+"买了一台电视机"+tv.name+"价格:"+tv.price);            }        else if(Thread.currentThread()==tvMaker){            System.out.println(tvMaker.getName()+"开始生产电视机...");            try{                tvMaker.sleep(2000);            }catch(InterruptedException e){ }            tv=new TV("长虹牌",4500);            System.out.println(tvMaker.getName()+"生产完毕!!!");        }    }}public class JoinThread{    public static void main(String args[]){        ThreadJoin th=new ThreadJoin();        th.customer.start();        th.tvMaker.start();    }}

 

转载于:https://www.cnblogs.com/scf141592/p/5767273.html

你可能感兴趣的文章
OS开发过程中常用开源库
查看>>
关于在多个UItextield切换焦点
查看>>
STL: HDU1004Let the Balloon Rise
查看>>
hdu 2768
查看>>
git记住用户名密码
查看>>
ElasticSearch(2)-安装ElasticSearch
查看>>
从mysql数据表中随机取出一条记录
查看>>
ORACLE 锁表处理,解锁释放session
查看>>
二.hadoop环境搭建
查看>>
深海机器人问题
查看>>
ios开发之 -- invalid nib registered for identifier
查看>>
MySQL 通过semi join 优化子查询
查看>>
socket编程-服务器端
查看>>
L181 The microscopic structure of a cat’s tongue helps keep its fur clean
查看>>
django序列化单表的4种方法的介绍
查看>>
迭代(遍历)时候不可以使用集合的remove和add方法,但可使用Java迭代器的remove和add方法...
查看>>
记录MYSQL中SQL语句的一个坑.
查看>>
网页基础
查看>>
在Oracle中设置主键自增
查看>>
正则表达式(括号)、[中括号]、{大括号}的区别小结
查看>>