Java 并发编程
Runnable & Thread
java实现并发有两种方法一种是实现Runnable 另外一种是继承Thread 并且实现run()方法。
Runnable(Interface)
一个接口 只有一个无返回值无参数的run()方法
public interface Runnable {
public abstract void run();
}
代码示例
实现Runnable接口 交给Thread运行实现并发
package cocurrentLearning;
/**
* Created by teng.liu on 2017/7/25.
*/
public class RunnableDemo implements Runnable {
private int i=10;
@Override
public void run() {
//这里写要并发的代码
System.out.println( Thread.currentThread().getName()+ " runnableDemo running: " + i--);
}
public static void main(String[] args) {
RunnableDemo runnableDemo = new RunnableDemo();
new Thread(runnableDemo,"1").start();
new Thread(runnableDemo,"2").start();
new Thread(runnableDemo,"3").start();
}
}
运行结果
2 runnableDemo runing: 9
1 runnableDemo runing: 10
3 runnableDemo runing: 8
每次运行结果顺序可能不同
Thread(class)
继承了Runnable 并且实现了start()、init()、stop()等若干方法
代码示例
package cocurrentLearning;
/**
* Created by teng.liu on 2017/7/25.
*/
public class ThreadDemo extends Thread {
public ThreadDemo() {
super();
}
public ThreadDemo(String name) {
super(name);
}
private int i = 10;
@Override
public void run() {
//并发逻辑需要在此处
System.out.println(Thread.currentThread().getName() + " ThreadDemo running " + i--);
}
public static void main(String[] args) {
new ThreadDemo("01").start();
new ThreadDemo("02").start();
new ThreadDemo("03").start();
}
}
运行结果
02 ThreadDemo running 10
03 ThreadDemo running 10
01 ThreadDemo running 10
每次运行结果顺序可能不同
区别
- Thread是类,Runnable是接口,并且Thread实现了Runnable。由于java本身 继承类和实现接口的区别,推荐使用实现Runnable
run()
方法,然后交给Thread来运行 - 资源共享的问题。通过Runnable本身不存在并发功能 需要把Runnable交给Thread来运行实现并发。对于其中的变量如上面的距离int变量i 所有线程执行完成后i Runable形式的变成8 Thread形式的还是10。如果Thread要实现资源共享需要把其中的资源变量声明为
static
Thread.start()
Thread最终执行的代码是run 但是可以看到我们在示例中并没有调用Thread的run()
而是调用了Thread的strat()
方法。调用star()
方法后线程进入就绪状态并不是立即执行而是系统为其分配CPU。
参考链接
http://www.cnblogs.com/DreamSea/archive/2012/01/11/JavaThread.html
https://www.dexcoder.com/dexcoder/article/3081