编程基础:Java/线程

 线程

下面总结基于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增强

遍历访问集合中元素的方法

线程

线程创建

两种创建方式:集成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)

线程状态

线程同步

Synchronized
同步代码块,也可以放在方法声明中
每个对象都对应于一个可称为“互斥锁”的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。
关键字 Synchronized来与对象的互斥锁联系。当某个对象用Synchronized修饰时,标定该对象在任一时刻只能由一个线程访问。
同步方法的锁可以是this,也可以是其他对象(要求是同一个对象)
同步方法(静态的)的锁为当前类本身。
同步方法如果没有使用static修饰,默认锁对象为this
如果方法使用static修饰,默认锁对象:当前类.class
多线程的锁对象必须为一个,用实现Runnabe的线程里加锁可以实现同步,如果基于继承Thread的方式,创建多个对象里的锁,并没有生效。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值