java_线程创建的三种方式及区别
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_线程创建的三种方式及区别的更多相关文章
- java核心知识点学习----创建线程的第三种方式Callable和Future CompletionService
前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...
- java核心知识点----创建线程的第三种方式 Callable 和 Future CompletionService
前面已经指出通过实现Runnable时,Thread类的作用就是将run()方法包装成线程执行体,那么是否可以直接把任意方法都包装成线程执行体呢?Java目前不行,但其模仿者C#中是可以的. Call ...
- Java实现线程的三种方式和区别
Java实现线程的三种方式和区别 Java实现线程的三种方式: 继承Thread 实现Runnable接口 实现Callable接口 区别: 第一种方式继承Thread就不能继承其他类了,后面两种可以 ...
- IOS 多线程,线程同步的三种方式
本文主要是讲述 IOS 多线程,线程同步的三种方式,更多IOS技术知识,请登陆疯狂软件教育官网. 一般情况下我们使用线程,在多个线程共同访问同一块资源.为保护线程资源的安全和线程访问的正确性. 在IO ...
- 于Unity3D动态创建对象和创建Prefab三种方式的原型对象
于Unity3D动态创建对象和创建Prefab三种方式的原型对象 u3d在动态创建的对象,需要使用prefab 和创建时 MonoBehaviour.Instantiate( GameObject o ...
- 黑马vue---56-58、vue组件创建的三种方式
黑马vue---56-58.vue组件创建的三种方式 一.总结 一句话总结: 不论是哪种方式创建出来的组件,组件的 template 属性指向的模板内容,必须有且只能有唯一的一个根元素 1.使用 Vu ...
- python核心高级学习总结3-------python实现进程的三种方式及其区别
python实现进程的三种方式及其区别 在python中有三种方式用于实现进程 多进程中, 每个进程中所有数据( 包括全局变量) 都各有拥有⼀份, 互不影响 1.fork()方法 ret = os.f ...
- 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】
一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...
- Java 实现线程安全的三种方式
一个程序在运行起来的时候会转换成进程,通常含有多个线程. 通常情况下,一个进程中的比较耗时的操作(如长循环.文件上传下载.网络资源获取等),往往会采用多线程来解决. 比如显示生活中,银行取钱问题.火车 ...
随机推荐
- 云计算OpenStack共享组件---Memcache缓存系统(3)
一.缓存系统 1.静态web页面: (1)在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request), ...
- linux中级之防火墙的数据传输过程
网络数据传输过程 netfilter在数据包必须经过且可以读取规则的位置,共设有5个控制关卡.这5个关卡处的检查规则分别放在5个规则链中(有的叫钩子函数(hook functions).也就是说5条链 ...
- 10.5 arp:管理系统的arp缓存
arp命令 用于操作本机的arp缓存区,它可以显示arp缓存区中的所有条目.删除指定的条目或者添加静态的IP地址与MAC地址的对应关系. 什么是arp?即地址解析协议(ARP,Address ...
- 企业实施CRM系统后的积极作用
公司在发展过程中,可能会遇到各种各样的问题,尤其是来自客户的问题,是最令广大企业头痛的.这并不是一个单方面的问题,不仅涉及到员工也涉及到企业.因此,许多企业使用CRM客户管理系统来管理客户,并通过它来 ...
- 2021 docker安装宝塔面板
拉取CentOS镜像 docker pull centos 创建 docker 容器 启动镜像,映射主机与容器内8888(宝塔面板).888(PHPMYADMIN)端口 -v 挂在目录 为了能够保存( ...
- GO学习-(23) Go语言操作MySQL + 强大的sqlx
Go语言操作MySQL MySQL是业界常用的关系型数据库,本文介绍了Go语言如何操作MySQL数据库. Go操作MySQL 连接 Go语言中的database/sql包提供了保证SQL或类SQL数据 ...
- GO学习-(18) Go语言基础之并发
Go语言基础之并发 并发是编程里面一个非常重要的概念,Go语言在语言层面天生支持并发,这也是Go语言流行的一个很重要的原因. Go语言中的并发编程 并发与并行 并发:同一时间段内执行多个任务(你在用微 ...
- Django(53)二次封装Response
前言 有时候我们使用drf的Response,会发现默认返回的格式不太友好,每次我们都需要写入以下的格式 return Response({ "status": 0, " ...
- video视频标签自定义显示隐藏播放控件&Shadow DOM
方法一:controlslist属性 controlslist="nodownload nofullscreen noremoteplayback" controlslist仅三种 ...
- Java IO学习笔记七:多路复用从单线程到多线程
作者:Grey 原文地址:Java IO学习笔记七:多路复用从单线程到多线程 在前面提到的多路复用的服务端代码中, 我们在处理读数据的同时,也处理了写事件: public void readHandl ...