Java 并发编程初学习

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值