android 学习笔记 1

Collections.unmodifiableList

简单来说,当我们封装了一个list,外面可能会需要获取这个list。如果直接将list返回,外界很可能会修改这个list,导致数据不稳定。那有没有解决办法呢?有的。

public List<String> getCourses(){
     return Collections.unmodifiableList(courses);
}

这样操作之后,通过 getCourses() 方法获得的 courses 是“只读的”,如果你试图向其添加一个新课程,则抛出 java.lang.UnsupportedOperationException。你必须通过 Student1.addCourse() 来向特定的 Student1 对象添加一个新课程。

 

daemon线程

java线程是一个运用很广泛的重点知识,我们很有必要了解java的daemon线程.

1.首先我们必须清楚的认识到java的线程分为两类: 用户线程和daemon线程

  • 用户线程: 用户线程可以简单的理解为用户定义的线程,当然包括main线程(以前我错误的认为main线程也是一个daemon线程,但是慢慢的发现原来main线程不是,因为如果我再main线程中创建一个用户线程,并且打出日志,我们会发现这样一个问题,main线程运行结束了,但是我们的线程任然在运行).
  • daemon线程: daemon线程是为我们创建的用户线程提供服务的线程,比如说jvm的GC等等,这样的线程有一个非常明显的特征: 当用户线程运行结束的时候,daemon线程将会自动退出.(由此我们可以推出下面关于daemon线程的几条基本特点)

2. daemon 线程的特点: 

  • 守护线程创建的过程中需要先调用setDaemon方法进行设置,然后再启动线程.否则会报出IllegalThreadStateException异常。
  • 由于daemon线程的终止条件是当前是否存在用户线程,所以我们不能指派daemon线程来进行一些业务操作,而只能服务用户线程。
  • daemon线程创建的子线程任然是daemon线程。

 

android 学习笔记 1

上一篇:Leetcode 1791. 找出星型图的中心节点 (计算定点的度)


下一篇:STM32 Bootloader 跳转到App