线程

为什么需要多线程?

提高cpu的利用效率,从而提高多个程序的运行速度。

多线程通过轮换的方式在单机系统中同时运行。

实现了Runnable接口类的实例都被称作可运行对象。
线程是Thread。

任务类只需要实现Runnable接口并重写其中的run方法

class A implements Runnnable{
	public void run(){
	
	}
}
new Thread(new A());

30.4
将start换成run,就等于没有启用多线程,只是调用了三个run方法,这个时候程序不具备有多线程的特性,只会依次执行。

调用了Thread中的start方法后,会转而以多线程的方式执行run。但是千万不要手工调用run,那样就成了普通的单线程。

不要依赖线程的优先级来确定那个线程可能会先执行。线程的优先级只是一个建议,而最终决定权实际上是在os手里。OS是线程。

线程同步:让多线程程序按照我们的要求有序配合执行,说的简单一点就是我们要控制多个线程的执行顺序。

临界资源:多个线程会同时操作的存储单元。比如变量。

临界区:操作临界资源的那一段代码。
正是因为有多个线程同时操纵临界资源,才会导致临界资源中的数据出现问题。
解决多线程运行时错乱的方法就是保护好临界资源,也可以说控制好临界区。

synchronized关键字用来说明这个方法在同一时刻只能被一个线程执行访问。

监视器:监视器是一个对象。任何对象都可以成为监视器。

一旦一个线程锁住对象。这个对象就成为了一个监视器。

Object o = new Object();
synchronized(o){
}

synchronized void f(){//此时synchronized的监视对象就是this
}

监视器拿来干什么的?拿来挂锁的。

如果使用手工锁,那么锁上的条件要使用await(),signal(),signal All()来完成。
如果使用synchronized,这是锁是自动加上和解锁的,当使用条件的时候就要使用wait(),notify(),notify
All()来完成。

如果只需要为一个任务创建一个线程,就用Thread类,
如果需要为多个任务创建线程,最好使用线程池。

创建线程池




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值