多线程

多线程

interrupt()方法只是为线程设置一个中断标记,并没有中断线程运行,一个线程在被设置了中断标记之后仍可运行,isAlive()返回true.实力方法isInterrupted()测试线程的中断标记,并不清除中断标记。而静态的interrupted()方法则不同,他会测试当前执行的线程是否被中断,并且在肯定的情况下,清除当前线程对象的中断标记并返回true

 

把线程从就绪状态进入运行状态的过程叫做线程调度。负责调度工作的机构叫做调度管理器。

优先级:线程的优先级的取值范围是1-10。
MAX_PRIORITY    =10
NORM_PRIORITY   =5
MIN_PRIORITY    =1

得到或修改线程的优先级
public final int getPriority();
public final void setPriority(int newPriority

 

 

 

void run()   //创建该类的子类时必须实现的方法

void start() //开启线程的方法

static void sleep(long t) //释放CPU的执行权,不释放锁

static void sleep(long millis,int nanos)

final void wait()//释放CPU的执行权,释放锁

final void notify()

static void yied()//可以对当前线程进行临时暂停(让线程将资源释放出来)

public final void stop()//结束线程,但由于安全的原因过时

 

 

 

 

注意:结束线程原理:就是让run方法结束。而run方法中通常会定义循环结构,所以只要控制住循环即可。

方法----可以boolean标记的形式完成,只要在某一情况下将标记改变,让循环停止即可让线程结束。但是,特殊情况,线程在运行过程中,处于了冻结状态,是不可能读取标记的。

那么这时,可以通过正常方式恢复到可运行状态,也可以强制让线程恢复到可运行状态,通过Thread类中的,interrupt():清除线程的冻结状态,但这种强制清除会发生InterruptedException。所以在使用 wait,sleep,join方法的时候都需要进行异常处理。

 

 

 

public final void join()//让线程加入执行,执行某一线程join方法的线程会被冻结,等待某一线程执行结束,该线程才会恢复到可运行状态

public final boolean isAlive()

将线程标记为守护线程(后台线程):setDaemon(true);注意该方法要在线程开启前使用。和前台线程一样开启,并抢资源运行,所不同的是,当前台线程都结束后,后台线程会自动结束。无论后台线程处于什么状态都会自动结束。

 

 

//模拟临界资源的类

classTickets{

    public int tickets;

    public Tickets(){

       tickets=10;

    }

    public synchronized void action(Stringname){

       System.out.println(name+"抢到了第"+tickets+"号票");

    }

}

//访问数据的线程

classTicketsThread extends Thread{

    Tickets t;

    String name;

    public TicketsThread(Tickets t,String name){

       this.t=t;

       this.name=name;

        start();

    }

    public void run(){

       try{

           for(int i=0;i<5;i++){

              t.action(name);

              Thread.sleep(10);

             

           }

       }catch(Exception e){}

      

    }

}

//测试多线程访问时的问题

publicclass TestMulThread2 {

    public static void main(String[] args){

       Tickets t=new Tickets();

       TicketsThread d1=newTicketsThread(t,"张三");

       TicketsThread d2=newTicketsThread(t,"李四");

       TicketsThread d3=newTicketsThread(t,"赵五");

       TicketsThread d4=newTicketsThread(t,"王六");

    }

 

}

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值