Java高级部分之线程重点总结(上)

2016年3月31日19:39:37

Java高级部分之线程重点总结(上)

作者:数据分析玩家

1、简述线程的概念

线程是一个程序里的不同执行路径,即线程就是不同的执行路径

2、简述多线程的概念

以前所编写的程序,每个程序都只有一个入口、一个出口以及一个顺序执行的序列,在程序执行过程中的任何指定时刻,都只有一个单独的执行点。

事实上,在单个程序的内部是可以在同一时刻进行多种运算的,这就是所谓的多线程

3、简述多线程的优点

1>多线程打破了传统意义上的编程模式:按照传统的理解,程序中的代码应该是一行一行的执行,上一行代码若没有执行完毕,下一行代码就不能执行,而多线程是若上一行代码没有执行完毕,下一行代码就可以执行,即两行代码可以交替的占用CPU来进行执行

2>多线程编程简单、效率高,能实现资源和数据的共享

3>因为多线程的特点,所以多线程适合开发服务程序:如web服务、聊天服务等

4、如何理解多线程中的同时执行

所谓同时执行就是交替的执行,也就是一个程序的流程在某一个地方单独的开辟了一个分支,两个分支不停的占用cpu来进行执行

5、简述cpu与多线程的关系

1>从本质上讲,cpu不可能在同一时间执行多个线程,只是因为cpu执行速度很快,所以看似cpu在执行多个线程,事实上是多个线程不停的占用cpu来交替的进行执行,所谓cpu很快指的是cpu在单个时间切换的速度很快

2>在多线程中,尽管cpu在多个线程之间来回的进行切换,但对于某个线程而言,虽然代码是断断续续的从上向下进行执行,但是代码仍然是按照顺序的从上向下进行执行,多个线程代码彼此之间的相互打乱只是一种假象

3>Java虚拟机当中有一个线程调度器,它里面有相应的方法控制哪个线程先执行,哪个线程后执行,但是具体是哪个线程先执行,哪个线程后执行则是由操作系统进行控制的,Java虚拟机不能够直接越过操作系统对硬件cpu进行控制,因此在实际开发过程中不能够依赖线程优先级来决定线程运行的次序

6、简述创建线程的两种方式

1>继承Thread类,并重写run方法

2>实现Runnable接口,并实现run方法

7、简述创建线程两种方式的比较(应用层)

1>若处理的是不同的资源,两种创建线程的方式均可

2>若处理的是相同的资源(如售票),最好通过实现Runnable接口的方式创建多线程:通过实现Runnable接口的方式创建多线程,只需要定义一个类对象就可以造出很多个线程,并且可以实现资源的共享,若通过继承Thread类的方式创建多线程,必须借助static等语法知识才能实现资源的共享

3>综上:几乎所有的多线程都是通过实现Runnable接口的方式创建的,这种方式具有无可比拟的优势

8、简述创建线程两种方式语法上的异同点

1>一个是重写父类中的run方法,一个是实现接口中的run方法,但最终都是通过Thread类中的start()方法调用相应的run()方法

2>run方法原本是Runnable接口中特有的,但是Thread类中也有;start方式是Thread类中特有的,Runnable接口没有,因为接口中的方法不能有方法体

9、简述多线程中的三个注意事项

1>start关键字具有两层含义:向下开辟一个新的线程,并执行本线程所对应的run()方法。

aa.start()会自动调用相应的run()方法,若直接写aa.run()就是传统的调用,不能开辟一个新的线程,只有写的是aa.start()才能开辟一个新的线程

2>执行完aa.start()之后并不表示aa对象所对应的线程立即得到执行,aa.start()执行完之后只是表明aa对象对应的线程具有了可以被cpu执行的资格,但由于想抢占cpu执行的线程很多,cpu并不一定会立即去执行aa对象所对应的线程,此时aa对象对应的线程将处于阻塞状态

一个线程对应三种不同的状态:阻塞状态、就绪状态、运行状态

3>一个Thread对象只能开辟一个线程

10、简述多线程中常用的方法(上)

1>start():向下开辟一个新的线程,并自动调用本线程所对应的run方法

2>currentThread():返回当前线程的引用

3>setName():通过引用设置当前线程的名字

4>getName():通过引用返回当前线程名字

5>sleep():暂停当前运行中的线程,使之进入到阻塞状态,待经过指定的延迟时间后在醒来进入到就绪状态,不是运行状态

                  

                                                                                                                                                                                                                                                                    2016年3月31日20:51:26

 

 

 

你可能感兴趣的:(Java重点核心重点)