题目24-多线程两种实现方式

1、多线程两种实现方式

(1)继承Thread

  • 定义类继承Thread
  • 重写run方法
  • 把新线程要做的事写在run方法中
  • 创建线程对象
  • 开启新线程, 内部会自动执行run方法
    (2)实现Runnable
  • 定义类实现Runnable接口
  • 实现run方法
  • 把新线程要做的事写在run方法中
  • 创建自定义的Runnable的子类对象
  • 创建Thread对象, 传入Runnable
  • 调用start()开启新线程, 内部会自动调用Runnable的run()方法

    2、多线程的安全问题及解决方案

    问题:当多线程并发, 有多段代码同时执行时,数据会产生错乱。
    方案:我们希望某一段代码执行的过程中CPU不要切换到其他线程工作. 这时就需要同步。

    3、死锁的产生原理

    多线程同步的时候, 如果同步代码嵌套, 使用相同锁, 就有可能出现死锁

    4、多线程两种实现方式的区别

    实现原理:
    继承Thread : 由于子类重写了Thread类的run(), 当调用start()时, 直接找子类的run()方法
    实现Runnable: 构造函数中传入了Runnable的引用, 成员变量记住了它, start()调用run()方法时内部判断成员变量Runnable的引用是否为空, 不为空编译时看的是Runnable的run(),运行时执行的是子类的run()方法
    优缺点:
    继承Thread :
    好处: 可以直接使用Thread类中的方法,代码简单
    弊端: 如果已经有了父类,就不能用这种方法
    实现Runnable:
    好处: 即使自己定义的线程类有了父类也没关系,因为有了父类也可以实现接口,而且接口是可以多实现的
    弊端: 不能直接使用Thread中的方法需要先获取到线程对象后,才能得到Thread的方法,代码复杂

原文地址:http://blog.51cto.com/357712148/2158267

时间: 2024-08-29 23:37:01

题目24-多线程两种实现方式的相关文章

多线程两种实现方式的区别

请解释Thread类与Runnable接口实现多线程的区别?(请解释多线程两种实现方式的区别?) 1. Thread类时Runnable接口的子类,使用Runnable接口实现多线程可以避免单继承局限!2. Runnable接口实现的多线程可以比Thread类实现的多线程更加清楚的描述数据共享的概念! 请写出多线程两种实现操作?(写出Thread类继承的方式和Runnable接口实现的方式代码!) 实现Thread类: 类似于代理设计模式! class MyThread extends Thre

【Python】python 多线程两种实现方式

目前python 提供了几种多线程实现方式 thread,threading,multithreading ,其中thread模块比较底层,而threading模块是对thread做了一些包装,可以更加方便的被使用. 2.7版本之前python对线程的支持还不够完善,不能利用多核CPU,但是2.7版本的python中已经考虑改进这点,出现了multithreading  模块.threading模块里面主要是对一些线程的操作对象化,创建Thread的class.一般来说,使用线程有两种模式: A

Java多线程的两种实现方式:继承Thread类 & 实现Runable接口

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! 创建和启动线程的两种传统方式: Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线程,有两种方法: ◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法: ◆实现Runnalbe接口,重载Runnalbe接口中的run()方法.

Java多线程13:读写锁和两种同步方式的对比

读写锁ReentrantReadWriteLock概述 大型网站中很重要的一块内容就是数据的读写,ReentrantLock虽然具有 完全互斥排他的效果(即同一时间只有一个线程正在执行lock后面的任务),但是效率非常低.所以在JDK中提供了一种读写锁 ReentrantReadWriteLock,使用它可以加快运行效率. 读写锁表示两个锁,一个是读操作相关的锁,称为共享锁:另一个是写操作相关的锁,称为排他锁.我把这两个操作理解为三句话: 1.读和读之间不互斥,因为读操作不会有线程安全问题 2.

JavaLearning:多线程的两种实现方式

第一种 继承Thread类 package org.fan.threaddemo; public class MyThread extends Thread{ private String name; public MyThread(String name){ this.name=name; } public void run(){//覆写run()方法 for(int i=0;i<30;i++){ System.out.println("Thread运行:"+this.name

线程的两种实现方式

线程有两种实现方式 一,Thread类 public class Thread implements Runnable{ } 二,Runnable接口 public interface Runnable{ public abstract void run(); } 区别:Thread是一个类,他继承了runnable接口,而runnable是一个接口, 一个类只能有一个父类,但是可以有多个接口,所以在拓展型方面,ruannale有更好的拓展性,更加灵活 Runnable还可以用于资源共享 1.

PlaceHolder的两种实现方式

placeholder属性是HTML5 中为input添加的.在input上提供一个占位符,文字形式展示输入字段预期值的提示信息(hint),该字段会在输入为空时显示. 如 1 <input type="text" name="loginName" placeholder="邮箱/手机号/QQ号"> 目前浏览器的支持情况 浏览器 IE6/7/8/9 IE10+ Firefox Chrome Safari  是否支持 NO YES YE

简易版聊天系统实现 Socket VS NIO两种实现方式

说是简单聊天系统,压根不能算是一个系统,顶多算个雏形.本文重点不在聊天系统设计和实现上,而是通过实现类似效果,展示下NIO 和Socket两种编程方式的差异性.说是Socket与NIO的编程方式,不太严谨,因为NIO的底层也是通过Socket实现的,但又想不出非常好的题目,就这样吧. 主要内容 Socket方式实现简易聊天效果 NIO方式实现简易聊天效果 两种方式的性能对比 前言 预期效果,是客户端之间进行"广播"式聊天,类似于QQ群聊天.希望以后有机会,以此简易版为基础,不断演进,演

Redis两种持久化方式(RDB&amp;AOF)

爬虫和转载请注明原文地址;博客园蜗牛:http://www.cnblogs.com/tdws/p/5754706.html Redis所需内存 超过可用内存怎么办 Redis修改数据多线程并发—Redis并发锁 windows下redis基础操作与主从复制 从而 数据备份和读写分离 Redis两种持久化方式(RDB&AOF) Redis的持久化过程中并不需要我们开发人员过多的参与,我们要做的是什么呢?除了深入了解RDB和AOF的作用原理,剩下的就是根据实际情况来制定合适的策略了,再复杂一点,也就