整理--点点滴滴

一,String和Stringbuffer的区别

        简单来说,就是变量和常量的区别。

1.StringBuffer对象的内容可以修改,而String对象产生之后就不可以被修改,重新赋值其实是两个对象。

2.String不可变,String没有用来改变已有字符串中的某个字符的方法,有一个优点,编译器可以把字符串社会共享的

String:

  • 对于String来说,对象值得改变其实就是创建了一个显得对象,然后把新的值保存进去。
  • String被final修饰,不可以被继承
  • String创建的对象的值存在于常量池,不用的时候不会被销毁
  • String运行的时间较长
  • String适用于比较短而小的字符串

StringBuffer

  • StringBuffer创建的 对象是可变的
  • StringBuffer的改变不像String的那样重新创建对象,而是通过构造器方法
  • Stringbuffer创建的对象值存在于栈区,不用的时候会被销毁
  • Stringbuffer运行时间比较短
  • StringBuffer适用于比较长的字符串,比较多的字符串

二.@Bean注解

  @Bean注解是项目启动是自动加载bean对象的一个操作,你dubug有@Bean注解的方法时,虽然已经到方法的 }结束,在控制台看到的对象还是null,不要慌,那是因为后面还有操作,继续下去,就会看到对象的初始化过程。   用@Autowire注入,对象就会有值。

三.synchronized和Lock有什么不同

  • synchronized是Java的内置关键词,在jvm层面,Lock是个Java类。
  • synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁
  • synchronized会自动的释放锁(1线程执行完同步代码块就会释放锁;或者线程执行过程中发生异常会释放锁);Lock需在finally中手动释放锁(unlock()方法会释放锁 ),否则容易造成线程死锁;
  • synchronized关键字的两个线程1和线程2,如果当前线程1获得锁,线程2线程等待。如果线程1阻塞,线程2则会一直等待下去;而Lock锁就不一定会等待下去,如果尝试获取不到锁,线程可以不用一直等待就结束。
  • synchronized的锁可重入、不可判断、非公平,而Lock锁可重入、可判断、可公平(两者皆可)
  • Lock锁适合大量同步的代码同步问题,synchronized锁适合代码少量的同步问题。
  • Lock有 ReentrantLock等等

四.进程和线程

进程是操作系统资源分配的最小单元。一个进程拥有的资源有自己的堆、栈、虚拟空间(页表)、文件描述等信息。从编程的角度来说,可以把它看作是一个类或者一个PCB(Process control block  进程控制块的结构体)。操作系统对一个正在运行的程序的一种抽象,可以吧进程看做程序运行的一次运行过程。

线程是操作系统能够进行运算调度的最小单元。它包含在进程中,是进程中实际运行的单位。一个进程中够可以并发多个线程,每个线程执行不同的任务。线程比进程更轻量。

两个区别

  • 根本区别,进程是操作系统进行资源分配的最小单元,线城市操作系统进行运算调度的最小单元;
  • 从属关系不同,进程中包含了线程,线程属于进程。
  • 开销不同,进程的创建、销毁和切换的开销都远大于线程。
  • 拥有的资源不同,每个进程有自己的内存和资源,一个进程中的线程会共享这些内存和资源。
  • 控制和影响不同,子进程无法影响父进程,而子线程可以影响父线程,如果主线程发生异常会影响其所在进程和子线程。
  • CPU利用率不同,进程的CPU利用率比较低,因为上下文切换开销较大,而线程的CPU的利用率较高,上下文的切换速度快。
  • 操作者不同,进程操纵者一般是操作系统,线程的操纵者一般是编程人员。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值