栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2022-06-22 Java中级知识整合

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2022-06-22 Java中级知识整合

1、线程与进程     进程是系统进行资源分配和调度的一个独立单位,线程是cpu调度和分派的基本单位        · 进程和线程的关系:
  1. 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程
  2. 资源分配给进程,同一进程的所有线程共享该进程的所有资源
  3. 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步
  4. 线程是指进程内的一个执行单元,也是进程的可调度实体
          ·进程和线程的区别:
  1. 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
  2. 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行
  3. 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源
  4. 系统开销:在创建和撤销进程的时候,由于系统都要为之分配和回收资源,导致系统的明显大于创建或撤销线程时的开销。但进程有独立的地址空间,进程崩溃后,在保护模式下不会对其他的进程产生影响,而线程只是一个进程中的不同的执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进 程死掉, 所以多进程的程序要比多线程的程序健壮,但是在进程切换时,耗费的资源较大,效率要差些。
2、什么是策略模式     定义了一系列的 算法 或 逻辑 或 相同意义的操作,并将每一个算法、逻辑、操作封装起来,而且使他们还可以相互替换(类似简化 if...else... 所带来的复杂和难以维护) 3、什么是游标     游标是sql查询结果集的一个指针,与select语句相关联,游标关键字是cursor          主要包含两个部分:游标结果集和游标位置:
  1.  游标结果集:执行select语句后的查询结果
  2.  游标位置:一个指向游标结果集内某条记录的指针
        游标主要有两个状态:打开和关闭:
  1.  只有当游标处于打开状态时,才能够操作结果集中的数据
  2.  当游标关闭后,查询结果集就不存在了
4、单例模式  双检索/双重校验锁(线程安全:DCL,即double-checked-locking)JDK1.5起     双锁机制的出现是为了解决前面同步问题和性能问题,解决了多线程并行进来不会重复new对象,而且也实现了懒加载         使用volatile可以禁止jvm的指令重排,保证在多线程下也能正常使用
public class Singleton{
    private volatile static Singleton singleton;
    private singleton(){}
    public static Singleton getSingleton(){
        if(singleton == null){
            synchronized(Singleton.class){
                singleton = new Singleton();
            }
        }
        return singleton;
    }
}
singleton = new Singleton(); 这段代码分三步执行:     1.为singleton分配内存空间     2.初始化singleton     3.将singleton指向分配的内存地址 执行顺序应为:1(分配空间)-> 2(初始化)-> 3(指向分配的地址), 由于JVM具有指令重排的特性,实际执行顺序可能变成1(分配空间)-> 2 (指向分配的地址)-> 3(初始化); Java允许 编译器 和 处理器 对指令进行重排,指令重排在单线程环境下不会出现问题,因为都是自己在操作, 但是多线程会导致一个线程获得还没有初始化的实例,例如,线程T1执行了 1(分配空间)-> 3(指向分配的地址), 此时T2调用getSingleton()方法后,发现singleton不为空,因此返回singleton,但此时singleton还未被初始化 5、在Java中守护线程和本地线程区别     java中的线程分为两种:守护线程(Daemon)和用户线程(User)     任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(boolean); true则把该线程设置为守护线程,反之为用户线程,Thread.setDeamon()必须在Thead.start()之前调用,否则会抛出异常         如果 主线程 结束,而 用户线程 还会一直跑,而 守护线程 则会结束
public static void main(String[] args) throws InterruptedException {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println("11111111");
                }
            }
        });

        Thread thread2 = new Thread(new Runner(),"t2");
        thread2.start();

        Thread thread3 = new Thread(new Runner(),"t3");
        thread3.start();
        thread.setDaemon(true);
        thread.start();
        Thread.sleep(3000);
        System.out.println("3333333");
    }
public class Runner implements Runnable{
    @Override
    public void run() {
        System.out.println("222222222");
    }
}
    运行结果:(如果是用户线程-Deamon=false,默认是false,则会一直循环11111111)         

 

这是今天的内容,细节需要大家去搜搜各自的关系,毕竟这只是我的记录,相关的细节都是百度查询到自己真的明白,毕竟知识学到手里才是自己的,祝大家Java前程似锦!     

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/985586.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号