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(); } } } } }
相关文章推荐
- eclipse中遇到的快捷键问题
- MAC OS下JDK版本切换指南
- MAC OS下JDK版本切换指南
- MAC OS下JDK版本切换指南
- Java 异常
- eclipse导入项目之后报错
- Java基础-double的精度问题
- Java的继承
- Java内存模型
- Java动态代理
- JAVA——System.in/字符流与字节流
- eclipse导入项目之后有感叹号
- RxJava(三) flatMap操作符用法详解
- RxJava flatMap操作符用法详解
- eclipse导入web项目变成java项目解决办法
- java utf-8文件处理bom头
- myeclipse安装和基本配置
- Spark Streaming源码解读之数据清理内幕彻底解密
- eclipse有生成不带参数的构造方法的快捷键吗
- JavaWeb的各种中文乱码终极解决方法