`
baiqian
  • 浏览: 38354 次
  • 性别: Icon_minigender_2
  • 来自: 河南
社区版块
存档分类
最新评论

黑马程序员—java基础—多线程、单例设计模式

阅读更多

---------------------- android培训java培训、期待与您交流! ----------------------

 

 

多线程:

 

创建一个线程的第一种方式:继承Thread类。

步骤:

1.定义类继承Thread.

2.重写Thread类中的run 方法。

3.调用线程的start 方法。

该方法有两个作用:启动线程,调用run 方法。

Thread类用于描述线程,

它定义了一个功能,用于存储线程要运行的代码。该存储功能就是run 方法。

创建一个线程的第二种方式:继承Runnable接口。

两种方法的区别:

继承Thread:线程代码存放在Thread子类的run方法中。

实现Runnable:线程代码存放在接口子类的run方法中。

多线程的安全问题:

当多条语句在操作同一线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完另一个线程参与进来执行。

解决方法:

对多条操作共享数据的语句,只能让一个线程都执行完,在执行过程中,其他线程不可以参与执行。

Java对于多线程的安全问题提供了专业的解决方案:

就是同步代码块

Synchronized(对象){

需要被同步的代码

}

火车上的卫生间——经典(同步锁)

同步的前提:

1、必须要有两个或者两个以上的线程。

2、必须是多个线程使用同一个锁。

必须保证同步中只能有一个线程在运行。

优点:解决了线程的安全问题

弊端:多个线程都需要判断锁,较消耗资源,

同步函数所使用的锁是this

同步函数被静态修饰后使用的锁是该方法所在类的字节码文件对象。类名.class

 

 

单例设计模式

懒汉式与饿汉式单例设计模式的不同:

 

懒汉式:

它的特点是实例的延迟加载,但是存在问题如果多线程访问时会出现安全问题,可以加同步来解决,加同步的方式:可以用同步代码块儿但稍微有些低效,用双重判断的方式可以解决效率问题,加同步的时候使用的锁是:该类所属的字节码文件对象。

饿汉式:

 

public  class Single {

 

//饿汉式

private static final Single single=new Single();

private Single(){}

public static synchronized Single getInstance(){

return single;

}

//懒汉式

private static Single single=null;

private Single(){}

public static  Single getInstance(){

if(single==null){

synchronized(Single.class){

if(single==null){

single=new Single();

}

}

}

return single;

}

}

死锁:同步中嵌套同步但锁不同。

当用线程写生产者消费者(多个生产者,多个消费者)时必须用while循环和notifalyAll();

 

JDK1.5中提供了(显示的锁机制及显示的锁对象上的等待唤醒操作机制)多线程升级解决方案。将同步synchronized替换成现实Lock操作。将Object 中的wait,notify ,notifyAll替换成了Condition对象,该对象可以Lock锁进行获取。它实现了本方只唤醒对方操作。(生产者消费者有什么替换方案?)

 

Stop方法已经过时,停止线程只有一种让run方法结束,开启多线程运行的代码通常是循环结构,只要控制住循环,就可以让run方法结束,即线程结束。

特殊情况:

当线程处于冻结状态,就不会读取到标记,那么线程就不会结束,当没有指定的方式让冻结的线程恢复到运行状态时,需要对冻结进行清除,强制让线程恢复到运行状态中来。这样就可以操作标记让线程结束。

Thread类提供该方法 interrupt();

Join:

A线程执行到了B线程的.join()方法时,A就会等待。等B线程都执行完,A才会执行,join可以用来临时加入线程执行!

 

 

---------------------- android培训java培训、期待与您交流! ----------------------

分享到:
评论

相关推荐

    黑马程序员入学Java精华总结

    ### 黑马程序员入学Java精华总结 #### 一、Java概述与基础知识 1. **何为编程?** - 编程是指通过编写计算机能够理解的指令来解决问题或完成特定任务的过程。这些指令通常被组织成算法,并使用某种编程语言实现。...

    黑马程序员java面试宝典 完整版PDF.rar

    7. **设计模式**:常见的设计模式如单例、工厂、观察者、装饰者、适配器、代理等,面试中常用来考察你的代码设计能力。 8. **JVM**:了解内存模型(堆、栈、方法区、本地方法栈),垃圾回收机制(GC),类加载机制...

    黑马程序员JAVA面试宝典2018年5月最新版

    这本书可能涵盖了Java语言基础、面向对象编程、JVM内存管理、多线程、并发编程、集合框架、IO流、网络编程、设计模式、数据库操作、Spring框架、MyBatis、微服务等相关领域。 首先,对于Java语言基础,书中的知识点...

    01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip

    【标题】"01_黑马程序员_张孝祥_Java基础加强_课程价值与目标介绍.zip" 提供的是一门由黑马程序员机构推出的Java基础强化课程,由讲师张孝祥主讲,旨在深入讲解Java编程的基础知识并进行能力提升。 【描述】中提到...

    黑马程序员面试宝典(java)2018版

    《黑马程序员面试宝典(java)2018版》是一本专门为Java开发者准备的面试指南,涵盖了大量在面试过程中可能遇到的问题和知识点。这本宝典由黑马程序员机构精心编纂,汇集了近万名学员的实际面试经验,为求职者提供了...

    2023黑马面试宝典-Java面试宝典大全-java面试宝典黑马

    Java面试宝典是Java程序员求职面试的重要参考资料,它涵盖了Java编程语言的核心概念、高级特性、设计模式、并发处理、框架应用、数据库交互等多个方面。以下将详细解析这些关键知识点: 1. **Java基础**:面试中,...

    黑马程序员面试宝典(java).7z

    《黑马程序员面试宝典》是针对Java开发人员的一份综合性的面试准备资料,它涵盖了Java全栈开发中的关键知识点,并且特别强调了在面试中可能会遇到的问题和解答。这份资源包含了一份超过500页的企业面试真题集,旨在...

    黑马程序员入学Java知识

    ### 黑马程序员入学Java知识 #### Java概述与基础知识 1. **何为编程?** - 编程是通过特定的计算机语言来编写指令,让计算机能够执行一系列任务的过程。 2. **Java语言概述,历史、特点** - Java是一种广泛...

    java程序员必备的面试宝典秘籍.pdf

    理解类图、对象图、序列图、状态图等UML图,以及设计模式如单例、工厂、观察者、装饰器等。 三、XML: XML作为数据交换格式,需要理解其基本语法,包括元素、属性、命名空间、文档类型定义(DTD)和XML Schema,...

    2018-2019年黑马最新版Java程序员面试宝典+题库pdf

    9. **设计模式**:学习常见的设计模式,如单例模式、工厂模式、建造者模式、装饰器模式、观察者模式等,并能灵活运用到实际项目中。 10. **框架应用**:重点介绍Spring框架,包括IoC容器、AOP(面向切面编程)、MVC...

    Java基础、面试等综合练习

    - **设计模式**:工厂模式、单例模式、观察者模式等23种设计模式的运用。 - **系统设计**:高并发、高可用、分布式系统的设计原则和实践经验。 - **性能优化**:内存管理、JVM调优、SQL优化等方面的问题解答。 -...

    黑马java面试题总结

    Java编程语言作为软件开发领域的重要角色,其面试题往往涵盖了广泛的知识点,包括但不限于基础知识、数据结构、算法、多线程、集合框架、IO流、网络编程、设计模式以及框架应用等。"黑马java面试题总结"很可能是一个...

    毕向东静态06

    在"黑马程序员_毕向东_Java基础视频教程第06天-09-面向对象(单例设计模式).avi" 这个文件中,毕向东老师可能会详细讲解以下内容: 1. **字符串基础**: - 字符串对象的创建:通过`new String()`或字面量`"abc"`。 ...

    黑马入学Java知识—精华总结(下)

    9. **设计模式**:常见的设计模式如单例、工厂、观察者、装饰者、代理等,是面试中衡量开发者设计能力的标准之一。 10. **Java EE相关**:对于Web开发,可能会涉及到Servlet、JSP、过滤器、监听器、MVC模式、Spring...

    2018最新版Java程序员面试宝典+题库

    这本书由"黑马程序员"机构出品,专门针对Java开发者在求职过程中的需求,帮助他们在面试中展现出扎实的技术功底。 1. **Java基础** - 类与对象:深入理解面向对象编程的基本概念,包括封装、继承、多态。 - 数据...

    Java基础最全笔记文档

    Java加强篇则进一步深入,如静态关键字`static`、单例设计模式、权限修饰符、枚举、抽象类、多态、内部类,以及更复杂的集合框架(如List、Set、Map)和泛型。除此之外,还有日期时间处理、正则表达式、异常处理、IO...

    传智播客-黑马32期Java视频

    8. **设计模式**:单例、工厂、装饰器、代理等23种设计模式的应用。 9. **实战项目**:结合实际应用场景,如构建小型Web应用或后台服务,提升动手能力。 此外,传智播客的教学风格往往注重实战,因此课程中很可能...

Global site tag (gtag.js) - Google Analytics