java多线程 初学回忆笔记

这是我在csdn上面发表的第一篇文章,也是当作自己学习的一个记录。

在b站大学初学多线程  以下内容全靠回忆和理解完成,如有不对或者遗漏的地方,敬请指正。

Thread

是一个父类,代表线程的模版,继承他的子类要需要改写run方法以让线程干活

子类对象必须要使用start方法去启动线程

线程 声明周期:就绪         运行           (阻塞)          死亡,其中线程被阻塞就会回到就绪状态

New多个thread的同一个子类对象可以实现多线程(这几个线程去同时执行thread子类中的run方法)

在tread子类中可以定义属性,每个线程可以操作这些属性。将属性中的变量设置为static 以让多个线程去操作同一个属性。(static修饰器修饰的属性和方法只能在内存中存储一份)

上面的操作会导致线程安全问题

runnerable

是一个接口。需要对象去实现(改写子类的run方法),使用方法是将其重写后的子类对象赋值给thread方法。并且创建thread对象去实现线程。

thread方法 源码实现大致方法(理解认知版):

Thread(runnerable对象)

{

run()//线程执行的操作

[if 括号内有runnerable对象形参

将自己的run方法指向runnerable对象中的run方法

并且将对象中的属性变为静态属性赋给自己]      用重载的方法实现(猜测)

start();//初始化并运行一个线程

}

Runnerable 知识点 :runnerable是接口 实现其必须重写run方法。

实现对象中可以定义共享数据

以上的Runnerable 方法也会导致线程的不安全 ,因此要在改写run方法的时候加入锁。

锁的作用 :让多个线程在改写共享数据时变成单线程改写(一个线程在改写共享数据的同时另一个线程无法对数据进行判断 改写(相当于另一个线程被阻塞)),以确保线程的安全性。

synchronized  

使用方法

synchronized(对象){

需要锁住的方法(一般为改写的run方法)

}

多线程中每个线程必须要用同一把锁 也就是每个synchroized 方法的形参必须要同一个对象,不然会导致多个线程使用了不同的锁。仍然会有安全问题。

在runnerable方法中,由于run方法是在runnerable接口实现类中实现。并且多个线程只调用了一个runnerable的接口实现类作为形参,因此锁形参可以采用this关键字:即指向当前的runnerable实现类,来保证多个线程共用一个锁(因为多个线程只共用了一个runnable类)

在只用tread的方法中,多个线程会new多个tread对象,导致锁不能使用当前对象及其属性、方法,因此不能使用this方法。但是可以new一个static对象让锁去调用,以实现唯一的锁。还可以调用当前类.class来作为锁的形参,因为类在内存中只加载一次,所以仍然可以保证锁的唯一性。

syncronized 修饰方法

将需要加锁的方法用syncronized关键字进行修饰,可以使该方法内的所有操作都上锁。适用于将多线程所实行的操作进行包装,统一上锁。

注意:要将方法包装必须要将方法声明为静态方法,以保证锁的唯一性。

静态方法的限制:静态方法里不能直接调用当前类中非静态的属性和变量。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值