摘要:
1.老大嘱咐的每句话都很重要,因为很有可能性老大让你注意的问题,最后真的发生了。所以,要牢记老大交代的任务。 2.早上上班第一件事情应该是看邮件。 3.团队中他人教自己解决某个问题,要争取琢磨透彻,或者马上用笔记记下来,这样,下次出现同样的问题,自己就能解决了。 4.上班至少提前二十分钟到公司,可以 阅读全文
摘要:
饥饿与公平: 1.高优先级吞噬所有低优先级的CPU时间片 2.线程被永久堵塞在一个等待进入同步块的状态 3.等待的线程永远不被唤醒 关于优先级,编程的时候注意: 不要假定高优先级的线程一定先于低优先级的线程,不要有逻辑依赖线程优先级,否则可能有意外错误。因为,不同的平台,对于同一个优先级的数值,可能 阅读全文
摘要:
1.线程安全性问题 2.性能问题:线程上下文切换,带来一定的性能损耗。 3.活跃性问题:死锁、饥饿、活锁。 a.死锁: A对象有a1资源,B对象有b1资源。A对象必须先获得b1资源才可以使用a1资源,而B对象必须先获得a1资源才可以使用b1资源。它们互相想要对方的资源,但是又不肯释放自己拥有的资源。 阅读全文
摘要:
运行结果: 如果想计算集合中数字的和,也可以使用lambda表达式实现: 运行结果: 阅读全文
摘要:
运行结果: 运行结果: 阅读全文
摘要:
指定一个线程任务,指定何时执行,指定每隔多久执行一次。其中,任务TimerTask是实现了Runnabe接口的。 运行结果: 阅读全文
摘要:
1.继承Thread类 2.实现Runnable接口 3.匿名内部类的方式 4.带返回值的线程 5.定时器 6.线程池的实现 7.Lambda表达式实现 8.Spring实现多线程 阅读全文
摘要:
2.1 用句柄操纵对象 句柄,即“引用”。创建句柄,要记得初始化。2.2 所有对象都必须创建2.2.1 保存到什么地方 1.寄存器:最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。 2.堆栈:驻留于常规 RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。 阅读全文
摘要:
1.1 抽象的进步 五大基本特征1.2 对象的接口 Light it = new Light();it.on();1.3 实现方案的隐藏 为什么要进行方法隐藏: 1.第一个原因是防止程序员接触他们不该接触的东西——通常是内部数据类型的设计思想。若只是为了解决特定的问题,用户只需操作接口即可,毋需明白 阅读全文
摘要:
1.定长数组 2.变长数组:数组缓冲 3.遍历数组和数组缓冲 4.数组转换 5.常用算法 6.多维数组 7.与Java的互操作 1.定长数组 方式一: 方式二:以下长度为2的Array[String]类型是推断出来的 2.变长数组:数组缓冲 准备一个空的数组缓冲 用+=在尾端添加元素 在尾端添加多个 阅读全文
摘要:
概要: 1.条件表达式 2.输入语句很长,实现换行 3.块表达式和赋值 4.输入和输出 5.循环 6.高级for循环和for推导式 7.函数 8.默认参数和带名参数 9.变长参数 10.过程 11.懒值 12.异常 1.条件表达式 BigInt是if与else两个分支的超类: Any是if与else 阅读全文
摘要:
使用数学函数,前提,是需要导包import 包名._: scala没有静态方法,不过它有个类似的特性,叫做单例对象。通常,每个类对应有一个伴生对象,其方法和java中的静态方法一样。 不带参数的scala方法通常不使用()。 apply方法 获取一个字符串中的某一个字符,"Hello"(4)其实是" 阅读全文
摘要:
支持的类型: Byte Char Short Int Long Float Double Boolean 与java区别是,这些类型是类。 scala不会可以区分基本类型和引用类型,如数字可以执行方法。 算术和操作符重载: scala不支持++,--操作 而java中如果要实现如上代码效果,需要x. 阅读全文
摘要:
val: 定义的值为常量 var:定义的值为变量 指定类型定义变量: 多个值或变量放在一起声明: 阅读全文
摘要:
最简单的scala演示: 解释器会显示结果并且显示结果的类型,同时,可以对结果进行运算。 方法提示与选择,如下: 再次按下Tab键,则自动补全。 阅读全文
摘要:
运行结果: 源码解读: 阅读全文
摘要:
通过继承Thread类的子类或者实现Runnable接口的匿名内部类方式启动线程: 输出结果: 思考: 如果同时使用这两种匿名内部类方式实现,是调用睡的呢? 输出结果: 对以上代码的解释: 在代码中,很明显,有一个子类thread继承了Thread,通过子类thread可以启动线程;同时,这个子类t 阅读全文
摘要:
输出结果: 源码解读: 1.Thread类:根据以下代码知道,我们传入的runnable参数最后是赋值给了Thread类的属性target。 2.调用start方法启动线程 3.Thread类就去找run方法: 4.于是,调用了我们runnable接口中重写的run方法。输出: 阅读全文