线程
下面总结基于java得到:
Thread 线程关闭_thread 关闭线程-CSDN博客
如上介绍适用于里Java里,在Python里线程是可以多次start的。
介绍线程suo的好好看看下面文章:
android 多线程共享数据 多线程数据共享安全_imking的技术博客_51CTO博客
包装类
Integer
与int的区别
String
StringBuilder StringBuffer StringJoiner
韩顺平 零基础30天学java讲的特别清楚。
String是Java里的一个类,属于引用类型,遵循引用类型的基本规律和要求。
另外从名字上我们也可以猜测出,字符串与字符有一定的关系。实际上,String字符串的内部是通过一个private final char[]数组来实现数据存储的,所以我们可以通过如下方式来表示一个字符串:
String是一个fina类,不能被继承,代表不可变的字符序列,一旦创建了一个String对象,一个字符串对象一旦被分配,其内容是不可变的,改变字符串对象的内容,会被重新分配内存。
String定义的变量,不管是直接赋值字符串还是new String,都是对象即引用。
使用注意事项:
1. 字符串赋值
new String的对象指向堆,直接赋值字符串定义的对象,指向常量池。
String str1 = ”hello“ + ”abc“
String a= ”hello“
String b= ”abc“
String str2 = a + b
如上程序,str1对象直接指向常量池,str2对象指向堆,str2背后用StringBuilder 实现。常量相加在池中,变量相加在堆中。
StringBuilder 中append是在原来字符串基础上追加的。
因此,如果需要频繁修改字符串对象的内容,请使用StringBuilder
2. String s=null与String s=""的区别:
● String s=null表示String对象为空,即字符串对象的引用指向了null,还没有指向任何的内存空间;
● String s=""是声明了一个字符串类型的引用,其值为"",表示是一个长度为零、内容为空的空字符串对象,但该对象不为空!这个s对象的引用指向的是空字符串的内存空间。
要想比较两个字符串,应该使用equals()方法,而不是"=="方法!
判断字符串是否为空建议使用如下方法:
当然,我们也可以直接使用字符串对象提供的isEmpty()或isBlank()方法,进行判空。另外我们要特别注意,防止出现空指针异常,并且也要考虑采用哪种方式判断为空的情况效率更高。
字符串的其他方法参考如下文章,讲的很清楚。
String基础讲的挺好
3. String内存分布
4. String对象方法
集合
概念及框架
提供了一套操作对象的方法,不同场景下使用不同的集合
集合主要是两组(单列集合,双列集合例如键值对)
Collection接口有两个重要的子接口List/Set,他们的实现子类都是单列集合
Map接口的实现子类是双列集合,存放的是键值对
迭代器Iterator及for增强
遍历访问集合中元素的方法
![](https://img-blog.csdnimg.cn/direct/d1a0e3a057234312865c050eb74cf314.jpeg)
线程
线程创建
两种创建方式:集成Thread或实现Runnable接口
实现Runnable接口方式更适合多个线程共享一个资源的情况
如下所示,创建线程时,可以把对象作为参数传下去去,在不同的线程里运行run代码,说有属性属于一个对象,方便资源共享,如果是继承Thread,需要创建多个对象,要想共享资源,需要设置成statci,详细参考:韩顺平线程应用案例 2-实现 Runnable 接口。
class SellTicket02 implements Runnable {
private int ticketNum = 100;//让多个线程共享 ticketNum
@Override
public void run() {
while (true) {
if (ticketNum <= 0) {
System.out.println("售票结束...");
break;
}
}
Runnable实现是代理模式
借这个机会把代理模式好好学习下!!!!!!
线程启动
线程对象调用start()方法调用start0()方法后,该线程并不一定会立马执行,只是将线程变成了可运行状态,具体什么时候执行,取决于CPU,由CPU统一调度。start0()是本地方法,只能被JVM调用。
线程对象调用run方法,run方法是一个普通方法,没有真正启动一个线程,就会把run方法执行完毕。
以上也可以理解成,run方法会阻塞,start方法不会zuse。
线程控制
线程常用方法
守护线程
seDaemon(True)
线程状态
线程同步
锁
![](https://img-blog.csdnimg.cn/direct/f04cc31d305a46d5a1144cfb00e915eb.png)