java线程通信概念_java基础<线程>总结(线程概念、线程创建方式、线程间通信、线程重要方法)...

基础篇之《线程》

@author :kern

————————————————————————————————————————————————————————————————

一:进程:是一个正在执行的程序。每一个进程都有一个执行顺序,该顺序是一个执行路径,或者叫一个执行单元。

二:线程:是进程中的一个独立的控制单元,线程在控制着进程的执行。一个进程中至少有一个线程。

三:多线程:

3.1 继承Thread类创建线程

方法:①创建一个类继承Thread类。

②复写Thread类的run方法。

③创建子类对象,调用Thread类的start方法,该方法作用是开始线程,调用run方法。

3.2线程的运行状态:

① 创建

② 运行

③ 冻结 有两种情况,一是sleep(时间),时间一到就唤醒了;二是wait(),要被notify()唤醒。

④ 消亡 有两种情况,一是stop(),二是run()方法运行结束后,线程会自动消亡。

⑤ 阻塞 又叫临时状态,即有执行资格但是没有执行权。

3.3 实现Runnable接口创建线程

方法:①创建类然后实现Runnable接口。

②复写Runnable接口的run()方法。

③通过Thread类创建线程对象,

④创建Runnable接口的子类对象,然后将其对象作为实际参数传递给Thread类的构造函数。

⑤调用Thread类的start()方法,开启线程调用run()方法。

3.4 继承和实现的区别:

实现Runnable接口避免了单继承的局限性。Runnable实现的同时还可以继承。

3.5 线程的安全问题:这里就说说线程中我们最常见的问题---执行资格和执行权的问题。

a。问题原因:当多条语句在操作同一个线程共享数据时,一个线程对多条语句只执行了一部分,还没有执行完,

另一个线程参与进来执行,导致共享数据的错误。

b。解决方案:对多条线程作为共享数据语句,只能让一个线程都执行完了。在执行的过程中,其他线程不可以参与执行。

同步代码块:synchronized(对象)

{

需要被同步的代码;

}

注:对象可以为任意对象 如:Object obj=new Object(); 对象如同锁,持有锁的可以再同步中执行,

没有持有锁的即使获取cpu的执行权也进不去。

3.5 同步的两种表现形式:

a。同步代码块;见3.4

b。同步函数:直接将synchronized作为修饰符修饰函数。

3.6 锁;a。同步函数用的是哪一个锁呢?

函数需要被对象调用,那么函数都有一个所属对象,就是this。所以同步函数使用的锁是this。

b。如果同步函数被静态修饰,那么使用的锁是什么呢?

静态方法中不可以定义this。静态进内存时,内存中没有本类对象,但是一定有该类对应的字节码文件。

类名。class,该对象的类型是class。所以静态同步方法,使用的锁是该方法所在类的字节码文件,类名。class;

四:线程间通信 :就是多个线程操作同一个资源,单单是操作的动作不同;

4.1 wait(),notify(),notifyAll(),用来操作线程,为什么定义在Object类中?

a。这些方法存在与同步中。

b。使用这些方法时必须要标识所属的同步的锁;

c。锁可以使任意对象,所以任意对象调用的方法一定定义在Object类中。

☆ 也就是说,等待和唤醒必须是同一个锁,而锁可以是任意对象所以可以被任意对象调用的方法定义在Object类中。

4.2 wait(),sleep()有什么区别?

wait()释放资源,释放锁。

sleep()释放资源,不释放锁。

4.3 JDK1.5的特性:提供了多线程升级解决方案。

a。将同步synchronized替换成Lock操作。

b。将Object中的wait,notify,notifyAll替换成condition对象。该对象可以通过Lock锁进行获取。

4.4 停止线程:

a。如何停止线程呢?

·原理:只有一种,run()方法结束。开启多线程运行,运行代码往往是循环结构,只要控制循环语句,就可以让run()方法结束。

·特殊情况:当线程处于停滞状态时,就无法读取标记结束循环语句,那么线程就不会结束,这时需要对冻结进行清除。

强制让线程恢复到运行状态,这样就可以操作标记结束线程。于是Thread类中提供了方法interrupt().

4.5 守护线程:void setDaemon(boolean on) 该方法必须在启动线程前使用。

4.6 join() 等待线程终止:即当A线程运行到B线程的join方法时,那么A线程就会等待,等待B线程全部运行结束再运行。

4.7 优先级;指线程抢到CUP的执行权的频率。默认优先级为5,最高为10;设置优先级setPriority()方法。

-----------------------------------------------------------------------------------------------------

我是一个菜菜菜菜鸟,想飞却怎么也飞不高,寻寻觅觅,寻寻觅觅·····

自学的过程中总结出来的一些关于函数的知识点,我就当一次复习了。

有需要的可以参考一下,如有漏掉的或者不完善的谢谢大家指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值