黑马程序员——多线程第三天

来源:互联网 发布:linux解压jar 编辑:程序博客网 时间:2024/05/15 11:21

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

多线程

一、停止线程

        JDK 1.5版本之前,有stop停止线程的方法,但升级之后,此方法已经过时。

那么现在我们该如果停止线程呢?

        只有一种办法,那就是让run方法结束。

1、开启多线程运行,运行代码通常是循环结构。只要控制住循环,就可以让run方法结束,也就是线程结束。

      如:run方法中有如下代码,设置一个flag标记。  

public void run(){while(flag){System.out.println(Thread.currentThread().getName()+"....run");}}

 那么只要在主函数或者其他线程中,在该线程执行一段时间后,将标记flag赋值false,该run方法就会结束,线程也就停止了。

2、上面的1方法可以解决一般情况,但是有一种特殊情况:就是当线程处于冻结状态。就不会读取到标记。那么线程就不会结束。

        当没有指定的方式让冻结的线程恢复到运行状态时,这时需要对冻结进行清除。强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。Thread类提供该方法interrupt();

如:

class StopThread implements Runnable{private boolean flag =true;public void run(){while(flag){System.out.println(Thread.currentThread().getName()+"....run");}}public void changeFlag(){flag = false;}}class StopThreadDemo{public static void main(String[] args) {StopThread st = new StopThread(); Thread t1 = new Thread(st); Thread t2 = new Thread(st); t1.start(); t2.start();int num = 0;while(true){if(num++ == 60){t1.interrupt();//清除冻结状态t2.interrupt();st.changeFlag();//改变循环标记break;}System.out.println(Thread.currentThread().getName()+"......."+num);}System.out.println("over");}}

结果:


二、什么时候用多线程?

        当某些代码需要同时被执行时,就用单独的线程进行封装。

示例:

class ThreadTest{public static void main(String[] args) {//一条线程new Thread(){public void run(){for (int x=0;x<100 ;x++ ){System.out.println(Thread.currentThread().toString()+"....."+x);}}}.start();//又是一条线程Runnable r= new Runnable(){public void run(){for (int x=0;x<100 ;x++ ){System.out.println(Thread.currentThread().getName()+"....."+x);}}};new Thread(r).start();//可以看作主线程for (int x=0;x<1000 ;x++ ){System.out.println("Hello World!");}}}

扩展:

1join方法

        当A线程执行到了b线程的.join()方法时,A线程就会等待,等B线程都执行完,A线程才会执行。(此时B和其他线程交替运行。)join可以用来临时加入线程执行。

2setPriority()方法用来设置优先级

        MAX_PRIORITY 最高优先级10

        MIN_PRIORITY   最低优先级1

        NORM_PRIORITY 分配给线程的默认优先级

3yield()方法可以暂停当前线程,让其他线程执行。


0 0
原创粉丝点击