黑马程序员_10多线程

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

多线程:

进程:一个正在执行的程序,一个进程中至少有一个线程,每一个进程执行都有个执行顺序,这顺序是一个执行路径(控制单元)

线程:进程中的一个独立控制单元,线程控制着进程的执行,而对线程这类事物的描述,在java里  是 Thread类

创建线程的方式,线程都有自己默认的名称,Thread-编号

1,继承thread类,复写里面的run方法,调用start方法

2,定义类实现runnable接口,

   复写runnable接口中的run方法,

   通过thread类建立线程对象

   将runnable接口的子类对象作为实际参数传递给thread的构造函数 

   调用thread类的start方法开启线程

   并调用runnable接口子类的run方法

实现方式:避免单继承的局限性,存放在接口的子类的run方法中.

继承thread:线程代码存放在thread子类的run方法中


常见方法:

cunrrentThread():获取当前线程对象

getName():获取线程名称

setName()或构造函数 :设置线程名称

同步:synchronized(对象){}

线程间的通讯就是多个线程操作同一资源(视频:生产者与消费者)

可以作为修饰符,修饰函数,同步函数使用的锁是this,如果同步函数被静态,修饰后使用的锁是该方法所在类的字节码文件对象.类名.class(类型:Class)

当多条语句在操作同一个线程共享数据时,一个线程对多条语句执行了一部分,还没有执行完,另一个线程参与进来执行,导致共享数据错误

同步的前提:必须要有两个以上的线程,必须是多个线程使用同一个锁,必须保证同步中只有一个线程在运行

解决了多线程的安全问题,但消耗资源

死锁:同步嵌套,A锁找B锁,B锁找A锁,无限循环

方法:配合synchronized()使用

wait():线程等待

notify():唤醒线程

notifyAll():唤醒全部线程

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

wait(),sleep()的区别是:
wait():释放cpu执行权,释放锁。
sleep():释放cpu执行权,不释放锁。

接口 Condition:

await():配合lock使用
signal():可以建立多个condition对象
signalAll():对应notifyAll()

停止线程:
只有一种方法,那就是run结束,就是循环结束
开启多线程,通常是循环接口,控制循环就可以让Run结束
当没有指定的方式让冻结的线程恢复到运行状态时,这时需要对冻结清楚,强制让线程恢复到运行状态中来,这样可以操作标记让线程结束
Thread类中提供该方法: interrupt();sleep(),wait()都能被中断.
join():

当A线程执行到了B线程的.join()时,A会等待,等B线程都执行完,A才会执行,可以用来临时加入线程执行

---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值