java中关于线程的创建有三种: (1)通过继承Thread类创建线程.

              (2)通过实现Runnable接口创建线程.

              (3)通过Callable 和 Future 接口创建线程.

* * * * * * * * * * * * * * * * * * * * * * * * * 继承Thread类创建线程 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

  1)重写run()方法, 该方法的方法体是线程需要执行的任务;

  2)启动线程, 调用start();

代码 :

 1 package demo;
2
3 public class TestThread{
4
5 public static void main(String[] args) {
6 Thread thread = new MyThread();
7 thread.start();
8 }
9 }
10
11 class MyThread extends Thread{
12
13 public void run() {
14 try {
15 System.out.println("稍等下!");
16 sleep(5000);
17 System.out.println(getName()+"执行了!");
18 } catch (InterruptedException e) {
19 e.printStackTrace();
20 }
21 }
22 }

* * * * * * * * * * * * * * * * * * * * * * * * * 实现Runnable接口创建线程 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

  1. 覆盖接口中run()方法, 该方法的方法体是线程需要执行的任务;

  2. 通过实现Thread类的构造函数Thread(Runnable target)或Thread(Runnable target, String name)来创建Thread实例, 这样就创建一个完整的线程对象;

  3. 启动线程, 调用start();

 代码 :

 1 package demo;
2
3 public class TestRunnable{
4
5 public static void main(String[] args) {
6 Thread thread=new Thread(new MyThread2());
7 Thread thread1=new Thread(new MyThread2());
8 thread.start();
9 thread1.start();
10 }
11 }
12
13 class MyThread2 implements Runnable{
14
15 public void run() {
16 try {
17 System.out.println("稍等下!");
18 Thread.sleep(500);
19 for(int i=0;i<100;i++){
20 System.out.println(Thread.currentThread().getName()+"线程的"+i+"执行了!");
21 }
22 } catch (InterruptedException e) {
23 e.printStackTrace();
24 }
25 }
26 }

* * * * * * * * * * * * * * * * * * * * * * * 实现Callable接口与Future接口创建线程 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

继承与实现接口的区别

  1. 将线程的任务从线程的子类中分离出来, 进行单独的封装, 按照面向对象的思想将任务封装为对象.

  2. 避免java单继承的局限性.

java_线程创建的三种方式及区别的更多相关文章

  1. java核心知识点学习----创建线程的第三种方式Callable和Future CompletionService

    前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...

  2. java核心知识点----创建线程的第三种方式 Callable 和 Future CompletionService

    前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...

  3. Java实现线程的三种方式和区别

    Java实现线程的三种方式和区别 Java实现线程的三种方式: 继承Thread 实现Runnable接口 实现Callable接口 区别: 第一种方式继承Thread就不能继承其他类了,后面两种可以 ...

  4. IOS 多线程,线程同步的三种方式

    本文主要是讲述 IOS 多线程,线程同步的三种方式,更多IOS技术知识,请登陆疯狂软件教育官网. 一般情况下我们使用线程,在多个线程共同访问同一块资源.为保护线程资源的安全和线程访问的正确性. 在IO ...

  5. 于Unity3D动态创建对象和创建Prefab三种方式的原型对象

    于Unity3D动态创建对象和创建Prefab三种方式的原型对象 u3d在动态创建的对象,需要使用prefab 和创建时 MonoBehaviour.Instantiate( GameObject o ...

  6. 黑马vue---56-58、vue组件创建的三种方式

    黑马vue---56-58.vue组件创建的三种方式 一.总结 一句话总结: 不论是哪种方式创建出来的组件,组件的 template 属性指向的模板内容,必须有且只能有唯一的一个根元素 1.使用 Vu ...

  7. python核心高级学习总结3-------python实现进程的三种方式及其区别

    python实现进程的三种方式及其区别 在python中有三种方式用于实现进程 多进程中, 每个进程中所有数据( 包括全局变量) 都各有拥有⼀份, 互不影响 1.fork()方法 ret = os.f ...

  8. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  9. Java 实现线程安全的三种方式

    一个程序在运行起来的时候会转换成进程,通常含有多个线程. 通常情况下,一个进程中的比较耗时的操作(如长循环.文件上传下载.网络资源获取等),往往会采用多线程来解决. 比如显示生活中,银行取钱问题.火车 ...

随机推荐

  1. 8.8-9 fsck、dd

    8.8 fsck:检查并修复Linux文件系统 fsck命令用于检查并修复文件系统中的错误,即针对有问题的系统或磁盘进行修复,类似的命令还有e2fsck命令.有关fsck的使用需要特别注意的是:    ...

  2. Centos7 搭建vsftpd

    1.安装vsftpd 在线安装:yum -y install vsftpd 离线安装:下载vsftp的rpm包,通过rpm -ivh xxx.rpm安装 2.修改/etc/vsftpd/vsftpd. ...

  3. linux命令--使用fsck修复文件系统

    使用fsck修复文件系统错误 1.问题描述 服务器maint_samba 由于服务器maint_samba (debian操作系统)没有正常关机,在重新启动过程中/dev/sdb1出现文件系统错误,需 ...

  4. unity texture 占用内存大小对比

    打包多种类型的项目,空项目和10张放在Resources文件夹中的图为比较案例.以下是比较数据. IPHONE: 1.空项目----空间占用量42.3MB----IPA大小10MB 2.10张1200 ...

  5. Nginx的配置参数中文说明

    Nginx的配置参数中文说明   前言 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行.其特点是占有内存少,并发能力强 ...

  6. Java中Map<Key, Value>存储结构根据值排序(sort by values)

    需求:Map<key, value>中可以根据key, value 进行排序,由于 key 都是唯一的,可以很方便的进行比较操作,但是每个key 对应的value不是唯一的,有可能出现多个 ...

  7. C# 将DLL制作CAB包并在浏览器下载,自动安装。(Activex)(包括ie打开cab包一直弹出用户账户控制,确定之后无反应的解决办法。)

    制作Activex程序网上有很多方法我就不说了,我的业务主要做的就是将DLL打包成CAB供浏览器下载. 下面制作证书,以及制作cab包需要用到一些工具.我将工具包上传到自己的博客园里了,以供大家下载. ...

  8. THINKPHP_(5)_THINKPHP6接收ajax下拉菜单提交的数据,存在的bug

    反思: 国产总是不尽人意,但是要支持国产. ThinkPHP的6接收ajax的post数据,存在一个bug.即ajax传递的json数据,在thinkphp后端解析出来后,并非直接的json格式. 描 ...

  9. NVIDIA 认证系统

    NVIDIA 认证系统 AI 是这个时代最强大的技术,需要新一代经过调整和测试的计算机来推动其发展. 自 1 月 27 日开始,可从 NVIDIA 合作伙伴处获取用于数据中心的新型加速服务器,推动 A ...

  10. 旷视MegEngine数据加载与处理

    旷视MegEngine数据加载与处理 在网络训练与测试中,数据的加载和预处理往往会耗费大量的精力. MegEngine 提供了一系列接口来规范化这些处理工作. 利用 Dataset 封装一个数据集 数 ...