黑马程序员——多线程知识总结

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

1. 多线程的实现方式

①继承Thread,线程代码写在子类run方法中。

②实现Runnable,线程代码写在接口子类的run方法中。

注意:推荐使用Runnable,因为其避免了单继承的局限性。

2. 实现同步的方式

①同步代码块

synchronized(对象)

{

需要被同步的代码

}

②同步函数,即将关键字synchronized作为修饰符写在函数修饰符位置。

public synchronized void Demo()

{

函数内的代码都将被同步

}

注意:实现同步必须有锁,①中用的所是“对象”,而②中用的锁一般是“this",当该函数被静态修饰后,它用的锁是该方法所在类的字节码文件对象(类名.class)。

3. 同步的前提

①必须要有两个或者两个以上的线程。

②必须是多个线程使用同一个锁。

4. 同步的影响

①好处:解决了多线程的安全问题。

②弊端:多个线程需要判断,较为消耗资源。

5.线程间通讯(等待唤醒机制)

①存在的原因:在“生产者-消费者”案例中,我们需要的情景是生产者生产一个商品,消费者消费一个商品,然后生产者再生产...这样循环操作,不允许生产者连续生产几个这种类似情形的出现。因为线程获取CPU资源是我们不可控的,所以一个线程在获取cpu资源期间很可能已经运行run()方法中的代码好多遍了。因此我们需要“等待唤醒机制”!

②成员:

在JDK1.5之前:wait(),notify(),notifyAll()

在JDK1.5之后:Lock替换了Synchronized,Condition的对象替换了Object里的上述方法。

6.线程的终止

①一般情况:直接改变run()里的while循环标记,让run()方法结束,线程也就结束了。

②特殊情况:线程处于冻结状态。此时需要调用Thread提供的interrupt()方法,强行解除冻结状态,然后操作和①一样。

注意:强行解除冻结状态会抛出InterruptedException异常。

7.将线程设为后台线程。

①特点:当前台线程都结束时,后台线程自动结束。

②方法:调用setDaemon(true)方法。

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



黑马程序员多线程练习题主要包括两个问题。第一个问题是如何控制四个线程在打印log之前能够同时开始等待1秒钟。一种解决思路是在线程的run方法中调用parseLog方法,并使用Thread.sleep方法让线程等待1秒钟。另一种解决思路是使用线程池,将线程数量固定为4个,并将每个调用parseLog方法的语句封装为一个Runnable对象,然后提交到线程池中。这样可以实现一秒钟打印4行日志,4秒钟打印16条日志的需求。 第二个问题是如何修改代码,使得几个线程调用TestDo.doSome(key, value)方法时,如果传递进去的key相等(equals比较为true),则这几个线程应互斥排队输出结果。一种解决方法是使用synchronized关键字来实现线程的互斥排队输出。通过给TestDo.doSome方法添加synchronized关键字,可以确保同一时间只有一个线程能够执行该方法,从而实现线程的互斥输出。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [黑马程序员——多线程10:多线程相关练习](https://blog.csdn.net/axr1985lazy/article/details/48186039)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值