您的位置:首页 > 编程语言 > Java开发

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

2016-05-29 17:14 447 查看

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();
}

}
}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: