多线程执行一些细节

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程执行一些细节相关的知识,希望对你有一定的参考价值。

 

停止线程
-----------
1、定义循环结束标记
 .因为线程运行代码一般都是循环,只要控制了循环即可
 

2、使用interrupt(中断)方法
.该方法是结束线程的冻结状态,使线程回到运行状态中来

注:stop方法已经过时不再使用

创建线程方式
--------------------
1、Thread
2、Runnable{public void run();}

例子:class Man extends Person implements Runnable{ //Man虽然具备有执行功能了,但它不是线程必须newThread这个参数可以传递一个Runnable接口的对象 ———》》new Thread(new Man()).start();如果运行的话还得托付Thread函数
  public void run(){
  .................

  }
}
 new Car().start();
 new Thread(new Man()).start();

 

sleep和监控权没有任何的关系

------------------------------------
创建线程方式二
-----------------
实现Runnable接口
1、子类覆盖安接口中的run方法
2、通过Thread类创建线程,并将实现了Runnable接口的子类对象作为参数传递给Thread
类的构造函数

3、Thread类对象调用start方法开启线程

思考:为什么要给Thread类的构造函数传递Runnable的子类对象?
答:用一个存在的类具备线程的功效,就不继承Thread了,只能通过其他的手段加以实现。只能实现一个Runnable接口


重写方法后才能调用父类的方法即:new一个对象后才行

-------------------------------------------------
线程安全问题
-----------
导致安全问题的出现的原因:
1、多个线程访问出现延时
2、线程随机性

注意:线程安全问题在理想状态下,不容易出现,但一旦出现对软件的影响是非常大的


-------------
同步(synchronized)

格式:
synchronized(对象){
需要同步的代码
 
}
同步可以解决安全问题的根本原因就在那个对象上。该对象如同锁定的功

同步的特点:
-------------
同步的前提:
1、同步需要两个或者两个以上的线程
2、多个线程使用的是同一个锁
未瞒足这两个条件,不能称其为同步

同步的弊端:

当线程相当多时,因为每个线程都会去判断同步上的锁,这是很耗费资源的,无形中会降低程序的运行效率

线程间通信
——————-

思考:wait(),notify(),notifyAll(),用来操作线程为什么定义在object类中?

答:1、这些方法存在与同步中。2、使用这些方法时必须要标识所属的同步的锁。3、锁可以是任意对象
所以任意对象调用的方法一定定义object类中。

 

思考2:wait(),sleep()有什么区别?
wait():释放cpu执行权,释放锁
sleep():释放cpu执行权,不释放锁
yield():等待指定的线程执行完后继续执行
notify通知去权
并发是同时执行————要考虑到线程的安全性

线程的其他方法 优先级
---------------
1、setPriority(int num)---》》优先级
2、setDaemon(booleanb)———》》守护线程 ———》如果一个程序中都是守护线程的话就会结束了
3、join()--》当子线程运行后再运行主线程,也就是使它们有序进行
4、自定义线程名称
5、toString ———》是toString方法

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

以上是关于多线程执行一些细节的主要内容,如果未能解决你的问题,请参考以下文章

多线程基础篇 - JavaEE初阶 - 细节狂魔

30.多线程

多线程(基于毕向东视频)

Java学习---多线程的学习

多线程进阶

Java多线程中join方法详解