JAVA学习(14) 多线程-Runnable接口

java多线程除了Thread类,还可以使用Runnable接口:实现Runnable的run函数,然后new Thread类传入Runnable接口类,调用start启动

线程sleep函数可以使用静态函数Thread.currentThread().sleep。

需要注意的是 只有run内部调用的函数才是在新开辟的线程中。

package com.test.java;

import javafx.scene.Parent;

public class Thread1 implements Runnable {
    private Test1 parent =null;
      public Thread1(Test1 parent) {
        this.parent = parent;
        // TODO 自动生成的构造函数存根
    }
    @Override
    public void run() {
        // TODO 自动生成的方法存根
        while (true) {
             try {
                Thread.currentThread().sleep(1000);
            } catch (InterruptedException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
             parent.data++;
             System.out.println(parent.data);
        }

    }

}
package com.test.java;

public class Test1 { 
public  int data = 0;
    public Test1()
    {  
        new Thread(new Thread1(this)).start();
    }

    public static void main(String[] args) {
             new Test1();
  }

}

为何需要Runnable类,有时候一个类封装完毕,后期需要加入线程可能不是很容易,实现Runnable接口会在这方面方便很多

package com.test.java;

public class Test1 implements Runnable{ 
public  int data = 0;
    public Test1()
    { 
        new Thread(this).start();
    }

    public static void main(String[] args) {
            Test1 test1 = new Test1();
  }

    @Override
    public void run() {
        // TODO 自动生成的方法存根
        while (true) {
            data++;
            System.out.println(data);
            try {
                Thread.currentThread().sleep(100);
            } catch (InterruptedException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
        }


    } 

}
如果需要线程操作,需要保存Thread指针
package com.test.java;

public class Test1 implements Runnable{ 
public  int data = 0;
public Thread mThread;//保存的线程变量 用来操作此线程
    public Test1()
    { 

        new OldThread().start();
        mThread=new Thread(this);
        mThread.start();

    }

    public static void main(String[] args) {
             new Test1();
  }

    @Override
    public void run() {
        // TODO 自动生成的方法存根
        while (true) {
            data++;
            System.out.println(data);
            try {
                Thread.currentThread().sleep(100);
            } catch (InterruptedException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
                break;
            }
        }


    } 
    //用来关闭线程当计数到10
    class  OldThread extends Thread{

        @Override
        public void run() {
            // TODO 自动生成的方法存根
             while (true) {
                 if (data>10) {
                    mThread.interrupt();
                }
                 try {
                    sleep(10);
                } catch (InterruptedException e) {
                    // TODO 自动生成的 catch 块
                    e.printStackTrace();
                }

            }
        }

    }

}

你可能感兴趣的:(java)