java--多线程调度与控制1

★ Java的多线程是抢占式的运行方式–setPriority()

public class myThread extends Thread{
    private int first;
    public myThread(int first){
        this.first=first;
    }
    @Override
    public void run() {
        for(int i=first;i<=100;i+=2){
            System.out.print(i+" ");
        }
        System.out.println();
    }
}
public class client {
    public static void main(String[] args) {
        myThread t1=new myThread(1);
        myThread t2=new myThread(2);
        t1.setPriority(5);
        t2.setPriority(7);//线程优先级,,高的会占一点优势。。相对调度
        t1.start();
//      t1.start();//IllegalThreadStateException非法线程状态--再次启动已启动的线程
        t2.start();
    }
}

★ sleep()方法
Thread类的sleep()方法对当前线程操作,是静态方法。sleep()的参数指定以毫秒为单位的线程休眠时间。除非因为中断而提早恢复执行,否则线程不会在这段时间之前恢复执行。
★ interrupt()方法
一个线程可以调用另外一个线程的interrupt()方法,这将向暂停的线程发出一个InterruptedException。变相起到唤醒暂停线程的功能。Thread类的方法interrupt(),是一种强制唤醒的技术。

public class myThread extends Thread{

    private int first;
    public myThread(int first){
        this.first=first;
    }
    @Override
    public void run() {
        if(first==2){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                System.out.println("wake up...");
            }
        }
        for(int i=first;i<=100;i+=2){
            System.out.print(i+" ");
        }
        System.out.println();
    }
}
public class client {

    public static void main(String[] args) {
        myThread t1=new myThread(1);
        myThread t2=new myThread(2);
        t1.start();
        t2.start();
        t2.interrupt();//mian线程强制唤醒t2
    }
}

★ yield()方法
用来使具有相同优先级的线程获得执行的机会。如果具有相同优先级的其它线程是可运行的,yield()将把线程放到可运行池中并使另一个线程运行。如果没有相同优先级的可运行线程,则什么都不做。
注意,执行一次yield()方法,该线程只是放弃当前这一次机会,然后又会重新和其它线程一起抢占CPU,很可能又比其它线程先抢到。
★ join()方法
调用某线程的该方法,将当前线程与该线程“合并”,即等待该线程结束,再恢复当前线程的运行。它可以实现线程合并的功能,经常用于线程的绝对调度。

public class myThread extends Thread{
    private int first;
    public myThread(int first){
        this.first=first;
    }
    @Override
    public void run() {
        if(first==1){
            yield();//只把机会让给同一优先级的线程。
        }
        for(int i=first;i<=100;i+=2){
            System.out.print(i+" ");
        }
        System.out.println();
    }
}
public class client {

    public static void main(String[] args) {
        myThread t1=new myThread(1);
        myThread t2=new myThread(2);
        t1.setPriority(6);
        t2.setPriority(6);

        t1.start();
//      try {
//          t1.join();//从当前位置,把所有t1线程要执行的任务执行完---绝对调度相当于单线程。
//      } catch (InterruptedException e) {
//          System.out.println("绝对调度异常");
//      }
        t2.start();
    }

}
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值