Java 并发编程初学习

来源:互联网 发布:php对比java 编辑:程序博客网 时间:2024/05/16 14:41

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: 91 runnableDemo runing: 103 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 1003 ThreadDemo running 1001 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

原创粉丝点击