java进阶部分自我总结

java进阶部分自我总结

ID:37353012

大小:57.00 KB

页数:9页

时间:2019-05-22

java进阶部分自我总结_第1页
java进阶部分自我总结_第2页
java进阶部分自我总结_第3页
java进阶部分自我总结_第4页
java进阶部分自我总结_第5页
资源描述:

《java进阶部分自我总结》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、Java进阶部分进程部分:进程中至少有一个线程负责执行java程序,而且这个线程运行的代码存在main方法中。正在运行的线程成为主线程。扩展:jvm启动的不仅仅一个线程,各个线程在不断的切换中,只是切换的速度比较快而已,java中还有专门负责回收java线程的机制。如何在自己的代码中自定义一个线程:1、我们通过对api的查找,java已经提供对java线程处理的类,如Thread类。(Thread类用于描述线程,该类定义了一个功能,用于存储线程运行的代码,该存储功能就是run方法。也就是说run方法用于存储线程要执行的代码——复写run方法的原因)第一种创建

2、线程的方法:继承Thread类。创建的步骤:①:定义类继承Thread类②:复写Thread类中的run方法,目的是将自定义运行代码存储在run方法中。③:调用Thraad的start方法(该方法有两个作用:启动线程;调用run方法)。在多线程中每一次运行的结果都不一样:因为多个线程都在获取cpu的执行权,cup执行到谁谁就执行,明确一点,某一个时刻,只有一个线程在执行(多核除外),cup作者快速的切换,以达到看上去是一起执行的效果,我们可以形象的把多线程的执行方式是抢夺cup的资源。多线程的特征:随机性——随抢到cup的资源哪个现正执行,创建两个线程,和主

3、线程交替运行.他们之间的交替是随机的。线程都有自己的默认的名称:Thread编号,该编号从0开始。staticThreadcurrentThread();用于获取当前线程;getThread();用于获取线程名称;设置线程的名称:setName()或者构造函数。线程的集中状态:start()sleep()wait()notify()stop()运行状态:正在运行的状态。冻结状态:放弃了执行权,即使被唤醒了还是回到阻塞状态。阻塞状态又叫临时状态:等待cup的执行权,也就是具备执行能力,但是没有执行权。第二种创建线程的方法:Runnable。步骤:1、定义类实现

4、Runnable接口。2、覆盖Runnable中的run方法,将线程要运行的代码存储在run()方法中。3、通过Thread类创建线程对象。4、将Runable接口的子类对象作为实际参数传递给Thread类的构造方法。5、调用Thread类的start()方法开启线程并调用Runnable接口子类的run()方法。为什么要将Runnable的子类对象传递给Thread的构造函数呢?因为自定义的run()方法所属的对象是Runnable接口的子类对象,所以让线程去执行指定对象的run()方法,就必须明确该run()方法所属的对象。Runnable实现方式的好处

5、就是:避免单继承的局限性实现了功能的扩展。继承Thread类:线程代码存放在Thread子类的run()中。实现Runnable:线程的代码存在接口的子类的run()方法中。多线程容易出现的安全问题:问题的原因:当多条语句在操作同一个线程对多条语句只执行了一部分还没有执行完,另一个线程参与进来执行,导致共享数据的错误。解决办法:对多条操作共享数据的语句,只能让一个线程都执行完,在执行的过程中,其他线程不可以参与执行。java对于多线程的安全问题提供了的解决方式:代码块同步。synchronized(object){需要被同步的代码块}。object如同锁,持

6、有锁的代码块可以在同步中执行,没有锁的代码即使获得cpu的执行权,也进不了,也就是不能执行。同步的另一种方式:将synchronized作为函数的修饰符——同步函数。同步函数用的是哪一个锁呢?函数需要被对象调用,那么函数都有一个所属的对象引用,就是this,所以同步函数的锁就是this。如果函数被Static修饰之后,函数的锁已经不再是this,那么函数使用的锁是什么?静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码文件对象,类名.class,该对象的类型是Class。静态的同步方法,使用的锁是该方法所在类的字节码文件对象。单例设计模式。(饿汉式

7、、懒汉式)(部分知识详见java面向对象基础部分)懒汉式特点:延时加载——多线程访问时存在安全问题,可以用他同步来解决,使用的锁为类所属的字节码对象。死锁:同步中嵌套含有同步,就是拥有锁的线程相互不给锁。创建线程需要解决的问题:1、明确哪些是代码是多线程代码。2、明确共享数据。3、明确多线程中哪些语句是操作共享数据的。集合框架:为什么需要这么多的容器:每个容器对数据的存储方式是不同的,存储的方式就是数据的类型(数据的类型决定了数据的存储方式和操作方式)。集合内存储的对象的类型可以不一样而且存储的数目可以为任意值。对容器就操作:增、删、改、查。创建一个集合容器

8、——使用Collection根接口的子类。1、add

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。