您的位置:首页 > 职场人生

黑马程序员之JAVA学习笔记:多线程学习大总结

2012-11-26 07:31 615 查看
---------------------------------------------------
2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------

多线程总结:

1,进程和线程的概念。

进程:是计算机程序在计算机里运行的一个单位

线程:是计算机进程运行里的一个单位,拥有计算机里的进程资源和内存资源。在进程运行下可以独立运行,减少了计算机里进程运行耗费大量资源的情况,提高了计算机的运行效率

2,jvm中的多线程体现。

主线程,垃圾回收线程,自定义线程。以及他们运行的代码的位置。

主线程,程序一启动就开始运行,加载对象和局部成员,

垃圾回收线程,当各种资源运行结束后,jvm会利用垃圾回收线程自动回收垃圾和各种资源。

自定义线程,程序员在程序里自己定义的运行线程,在内存栈里运行

3,什么时候使用多线程,多线程的好处是什么?创建线程的目的?

当需要多部分代码同时执行的时候,可以使用。

好处:提高了程序运行效率。

目的,使线程并发执行,执行任务

4,创建线程的两种方式。

继承Thread

步骤

1,定义基础Thread类,

2,覆盖Thread类中的run方法。

3,创建Thread类的子类对象,创建线程对象

4,调用线程对象的start方法开启线程

实现Runnable

步骤

1,定义一个实现Runnable接口

2,覆盖Runnable接口中的run方法。将线程要运行的代码存储到run方法中。

3,创建该接口的子类对象。

4,通过Thread类进行线程的创建,并肩将Runnabl接口的子类对象作为Thread累的构造函数的实参进行传递。

两种方式的区别?

Thread方法需要继承Thread类,一旦继承了,由于java的单继承,子类就不能继承其他类,有局限性。 Runnable只需定义接口即可,方便,降低了程序的耦合性,和扩大了扩展性,

5,线程的5种状态。

对于执行资格和执行权在状态中的具体特点。

被创建:线程才开始被创建,具有执行资格,还没执行权限。

运行:具有执行资格和执行权线

冻结:释放了执行资格和执行权线

临时阻塞:具有cpu执行资格但没有执行权

消亡:线程被垃圾回收器回收

6,线程的安全问题。

安全问题的原因:多线程并发执行时,相互抢占共有资源,会出现线程死锁的安全问题

解决的思想:当一个线程使用共有资源时,使其他线程无法再享有共有资源

解决的体现:使用synchronized锁,有同步代码块和同步函数

同步的前提:但是加上同步还出现安全问题,就需要用前提来思考。

同步中应该有多个线程,而且共有同一把锁,

同步的两种表现方法和区别:

同步代码块和同步函数,

同步函数的写法简单,同步函数使用的锁是this,同步代码块使用的锁是任意指定的对象

同步的好处和弊端:

好处,防止了安全问题,

弊端,降低了程序运行性能,消耗资源

单例的懒汉式。

在多线程并发执行是,会出现创建多个对象的情况,这样就打破了单例的模式,可以使用synchronized和双重判断来解决

恶汉式代码:

class Single

{

private static Single s=null;

private Single(){}

public static Single getInstance()

{

if(s==null)

{

synchronized(Single.class)

{

if(s==null)

s=new Single();

}

}

return s;

}

}

死锁: 多个线程并发执行,共同使用共享资源,会出相互拥有资源而无法用其他线程拥有的资源,又无法释放自己的资源导致死锁。

7,线程间的通信。等待/唤醒机制。

概念:多个线程,不同任务,处理同一资源。

等待唤醒机制。使用了锁上的 wait notify notifyAll. ★★★★★

生产者/消费者的问题。并多生产和多消费的问题。 while判断标记。用notifyAll唤醒对方。 ★★★★★

JDK1.5以后出现了更好的方案,★★★

Lock接口替代了synchronized

Condition接口替代了Object中的监视方法,并将监视器方法封装成了Condition

和以前不同的是,以前一个锁上只能有一组监视器方法。现在,一个Lock锁上可以多组监视器方法对象。

可以实现一组负责生产者,一组负责消费者。

wait和sleep的区别。★★★★★

wait可以有时间限制也可以没有时间限制,sleep必须有时间限制,

使用wait时,线程释放了其cpu执行资格和权限,会释放锁

sleep释放执行权限,不会释放锁。

8,停止线程的方式。

原理:

可以使用stop方法,但已经过时

表现:--中断。

停止线程可以使用run方法,当线程没有了要运行的代码线程就结束了,意味着,任务结束,线程消失。一般情况下run方法中会定义循环,结束run方法,通过标记控制其中的循环就行了,如果读不到标记,线程就处于了冻结状态,可以用Thread类中的interrupt方法,清除线程中的冻结状态。

9,线程常见的一些方法。

setDaemon()将线程标记为守护线程

join();等待该线程终止

优先级 可以设置线程获取cpu执行权限的优先顺序

yield();临时暂停线程

在开发时,可以使用匿名内部类来完成局部的路径开辟。

---------------------------------------------------
2345王牌技术员联盟、2345王牌技术员联盟、期待与您交流!---------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: