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

1.继承Thread类

2.实现Runnable接口

3.实现Callable接口

第一种:

        //继承Thread类
class ExtendsThread extends Thread{
public void run(){
//do your stuff
}
}
ExtendsThread e = new ExtendsThread();
e.start();

第二种:

          //实现Runnable接口
class ImpleRunnableThread implements Runnable{
@Override
public void run() {
//do your stuff
}
}
ImpleRunnableThread ir = new ImpleRunnableThread();
Thread t = new Thread(ir);
t.start();

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

          //实现Callable接口
class ImpleCallableThread implements Callable{
@Override
public Object call() throws Exception {
// TODO do you stuff
return null;
}
}
ImpleCallableThread ic = new ImpleCallableThread();
FutureTask<String> task = new FutureTask<String>(ic);
new Thread(task,"有返回值的线程").start();

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

3)看看线程的执行顺序情况:

 for(int i =0;i<5;i++){
Thread thread = new Thread(""+i){
public void run() {
System.out.println("run...."+ getName());
}
};
thread.start();
}

output:

    

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

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

 new Thread(new Runnable(){
@Override
public void run() {
// do your stuff 1
}
}){
public void run(){
//do your stuff 2
}
};

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

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

【多线程学习(1)】创建java多线程的更多相关文章

  1. 学习笔记之JAVA多线程

    Java程序设计实用教程 by 朱战立 & 沈伟 孙鑫Java无难事 Java 多线程与并发编程专题(http://www.ibm.com/developerworks/cn/java/j-c ...

  2. Java多线程编程核心技术(一)Java多线程技能

    1.进程和线程 一个程序就是一个进程,而一个程序中的多个任务则被称为线程. 进程是表示资源分配的基本单位,线程是进程中执行运算的最小单位,亦是调度运行的基本单位. 举个例子: 打开你的计算机上的任务管 ...

  3. Java多线程学习笔记——从Java JVM对多线程数据同步的一些理解

       我们知道在多线程编程中,我们很大的一部分内容是为了解决线程间的资源同步问题和线程间共同协作解决问题.线程间的同步,通俗我们理解为僧多粥少,在粥有限情况下,我们怎么去防止大家有秩序的喝到粥,不至于 ...

  4. 学习笔记《Java多线程编程实战指南》二

    2.1线程属性 属性 属性类型及用途  只读属性  注意事项 编号(id) long型,标识不同线程  是  不适合用作唯一标识 名称(name) String型,区分不同线程  否  设置名称有助于 ...

  5. 学习笔记《Java多线程编程实战指南》一

    1.1什么是多线程编程 多线程编程就是以线程为基本抽象单位的一种编程范式,和面向对象编程是可以相容的,事实上Java平台中的一个线程就是一个对象.多线程编程不是线程越多越好,就像“和尚挑水”的故事一样 ...

  6. Java多线程学习(一)---并发与多线程

    Java并发与多线程 摘要: 1. 并发与并行的区别,何为并发编程,并发编程的优势在哪 2. 多线程.多任务.多进程机制概述 3. 多线程.多任务.多进程机制与编程思想的关系 一.并发 1.1 并发与 ...

  7. 创建Java多线程的两种方式和线程异常

    一.使用多线程的两种方法  使用多线程的两种方法有:继承Thread类和实现runable接口. 二.继承Thread类 来看一下thread类的源代码: class Thread implement ...

  8. Qt多线程学习:创建多线程

    [为什么要用多线程?] 传统的图形用户界面应用程序都仅仅有一个运行线程,而且一次仅仅运行一个操作.假设用户从用户界面中调用一个比較耗时的操作,当该操作正在运行时,用户界面一般会冻结而不再响应.这个问题 ...

  9. 学习笔记《Java多线程编程实战指南》三

    3.1串行.并发与并行 1.串行:一件事做完接着做下一件事. 2.并发:几件事情交替进行,统筹资源. 3.并行:几件事情同时进行,齐头并进,各自运行直到结束. 多线程编程的实质就是将任务处理方式由串行 ...

随机推荐

  1. c# base new 等关键字基础

    base关键字 不仅可以  调用父类的 实例方法,也能狗调用父类的 构造方法 https://www.cnblogs.com/aehyok/p/3519599.html

  2. Python基础之字符串(str)常用操作

    1.字符串常用的方法 len()返回字符串的长度 ##Python3 >>> print(len('ab12我')) 5 ##Python2 >>> print(l ...

  3. ssm整合-错误

    [Err] 1005 - Can't create table 'imoocdb.ec_article' (errno: 150) 这个错误由外键约束引起的 java.lang.ClassCastEx ...

  4. JZOJ 5913. 林下风气

    Description 里口福因有林下风气,带领全国各地高校掀起了一股AK风,大家都十分痴迷于AK.里口福为了打击大家的自信心,出了一道自以为十分困难的题目.里口福有一棵树,第i个节点上有点权ai,他 ...

  5. 时间轮算法的定时器(Delphi)

    源码下载 http://files.cnblogs.com/lwm8246/uTimeWheel.rar D7,XE2 编译测试OK //时间轮算法的定时器 //-- : QQ unit uTimeW ...

  6. 第三章 文件 I/O

    3.1 引言 先说明可用的文件 I/O 函数:open.read.write.close,然后说明不同缓冲区长度对read和write函数的影响. 本章所说的函数经常被称为不带缓冲的 I/O (unb ...

  7. CERC2017 F: Faulty Factorial 简单数论题

    #include <iostream> using namespace std; #define ll long long ; ll n,p,r; ll poww(ll a,ll b){ ...

  8. python几个复习例子

    1.实现1-100的所有的和,程序代码如下: sum = 0 for i in xrange(1,101): sum +=i print (sum) 程序运行结果: 2.实现1-500所有奇数的和,程 ...

  9. Eclipse 修改字符集---Eclipse教程第02课

    默认情况下 Eclipse 字符集为 GBK,但现在很多项目采用的是 UTF-8,这是我们就需要设置我们的 Eclipse 开发环境字符集为 UTF-8, 设置步骤如下: 在菜单栏选择 Window ...

  10. css一些事儿

    1. margin和padding 如果边界画一条线,则margin的属于边界外,padding属于边界内 当我们给元素背景色时,margin区域不会被着色,而padding区域会被着色. 当上下两个 ...