多线程学习记录一创建java多线程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程学习记录一创建java多线程相关的知识,希望对你有一定的参考价值。

1)java多线程的创建方式有三种:

1.继承Thread类

2.实现Runnable接口

3.实现Callable接口

第一种:

技术分享
1        //继承Thread类
2     class ExtendsThread extends Thread{
3         public void run(){
4             //do your stuff
5         }
6     }
7     ExtendsThread e = new ExtendsThread();
8     e.start();
View Code

第二种:

技术分享
 1          //实现Runnable接口
 2     class ImpleRunnableThread implements Runnable{
 3         @Override
 4         public void run() {
 5             //do your stuff
 6         }
 7     }
 8     ImpleRunnableThread ir = new ImpleRunnableThread();
 9     Thread t = new Thread(ir);
10     t.start();
View Code

第三种是jdk1.5以后提供的:

技术分享
 1          //实现Callable接口
 2     class ImpleCallableThread implements Callable{
 3         @Override
 4         public Object call() throws Exception {
 5             // TODO do you stuff
 6             return null;
 7         }
 8     }
 9     ImpleCallableThread ic = new ImpleCallableThread();
10     FutureTask<String> task = new FutureTask<String>(ic);
11     new Thread(task,"有返回值的线程").start();
View Code

 

2)可以看到线程启动用的是start这个方法,为什么呢?打开start()源码可以看到,在Thread类里start()调用了 private native void start0();native关键字表示调动的是操作系统的底层函数,这样的技术成为JNI(Java Native Interface)。

看看线程的执行情况:

技术分享
1 for(int i =0;i<5;i++){
2             Thread thread = new Thread(""+i){
3                 public void run() {
4                     System.out.println("run...."+ getName());
5                 }
6             };
7             thread.start();
8         }
View Code

output:

    技术分享

3)虽然启动线程的顺序是有序的,但是执行线程的顺序并非是有序的,因为线程是并行执行而非顺序的,它的执行顺序由JVM和操作系统一起决定。

4)如果同时使用继承Thread类、Runnable接口这两种的话,执行的是哪个run方法呢?

技术分享
 1 new Thread(new Runnable(){
 2             @Override
 3             public void run() {
 4                 // do your stuff 1
 5             }
 6         }){
 7             public void run(){
 8                 //do your stuff  2
 9             }
10         };
View Code

以上代码相当于new Thread(new Runnable(){run()}){run()},由于Thread类本身实现了Runnable接口,所以如果自身重写了run方法的话,那么就会覆盖父类的方法,所以会执行第二个run方法。

 

下一篇说明这三种创建方式的区别。

以上是关于多线程学习记录一创建java多线程的主要内容,如果未能解决你的问题,请参考以下文章

java学习--多线程基础

多线程学习系列-初探深入浅出Java多线程-入门

java多线程学习-一

java多线程-Thead线程学习记录笔记

Java多线程学习(详细)

java核心学习(二十一) 多线程---创建启动线程的三种方式