Java教程

java多线程 初学回忆笔记

本文主要是介绍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方法

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

}

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

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

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

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

synchronized  

使用方法

synchronized(对象){

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

}

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

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

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

这篇关于java多线程 初学回忆笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!