------- android培训、java培训、期待与您交流! ----------
进程的概念:
进程是一个正在执行中的程序。
每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。
线程:就是进程中的一个独立的控制单元。
线程在控制着进程的执行。
线程在控制着进程的执行。
一个进程中至少有一个线程。
Java 虚拟机允许应用程序并发地运行多个执行线程。
定义一个线程:
通过API我们可以看到线程的实现方法,一种方法是将类声明为
还有一种方法是声明实现
![](https://img-blog.csdn.net/20140404153111093?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTg3MTU3MzY3Mw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
两者有一个不一样的地方就是一个是Thread在运行这个run方法, 另外一个是由Runnable 的子类, 也就是自定义的这个类来运行 run方法,实现Runnable接口避免了单继承的局限性。大致的功能是一样的, 它们都是通过star()方法开启线程并运行线程,
为什么要覆盖Run方法:
我们需要执行多条线程,通常情况,我们定义一个方法,只能被相对应的类对象访问,如果要执行并发性访问,这时候就需要用多线程,于是JAVA的Thread就提供了一个RUN方法,用于存储我们的自定义方法,然后通过Thread或者Runnable可以同时访问到这个Run方法,这就是实现了多线程这个概念。
线程的执行权:
因为是由JVM来控制这个线程,与windows底层的接口做交互动作,所以就成了计算机来控制线程的执行权,我们无法控制线程的执行权,但是我们可以设置线程的同步,以达到线程并发性访问动作。
线程的状态:
线程开启具有执行资格,但是没有执行权,当CPU拿到执行权后线程才会被执行。
于是就有了2种状态:
①阻塞式:等待。有执行资格,木有执行权。
②冻结:睡眠。直接放弃执行权,直到他被唤醒。
灭亡:线程结束。
稍后会用一个实例来说明这个现象。
访问(多线程的安全同步 ?同步:不同步):
首先,需要一个共享资源, 因为是多个线程的同时访问,多个线程执行同一个方法,比如说CPU是四核的,那么一个核心执行一条线程,四个核心就执行了4条线程,并且是同时执行的,那么就出现了4个线程执行一个方法,所以多线程是不同步的,由于不同步那么如果我们如果要执行并发性的问题就不行了。
解决方案(前提是必须要有2条或者2条以上的线程,一条线程无需同步,并且这2条线程要共用一个锁的对象):
基于并发性问题,线程提供了一个同步代码块的功能,synchronize
执行多个方法,我们可以用 synchronize 将方法锁上,如图:
由于CPU执行太快,我们可以使用一个wait方法便于观看。
Java 虚拟机允许应用程序并发地运行多个执行线程。
定义一个线程:
通过API我们可以看到线程的实现方法,一种方法是将类声明为
Thread
的子类。该子类应重写 Thread
类的run
方法。接下来可以分配并启动该子类的实例。还有一种方法是声明实现
Runnable
接口的类。该类然后实现 run
方法。也就是实现了自己自定义的方法两者有一个不一样的地方就是一个是Thread在运行这个run方法, 另外一个是由Runnable 的子类, 也就是自定义的这个类来运行 run方法,实现Runnable接口避免了单继承的局限性。大致的功能是一样的, 它们都是通过star()方法开启线程并运行线程,
为什么要覆盖Run方法:
我们需要执行多条线程,通常情况,我们定义一个方法,只能被相对应的类对象访问,如果要执行并发性访问,这时候就需要用多线程,于是JAVA的Thread就提供了一个RUN方法,用于存储我们的自定义方法,然后通过Thread或者Runnable可以同时访问到这个Run方法,这就是实现了多线程这个概念。
线程的执行权:
因为是由JVM来控制这个线程,与windows底层的接口做交互动作,所以就成了计算机来控制线程的执行权,我们无法控制线程的执行权,但是我们可以设置线程的同步,以达到线程并发性访问动作。
线程的状态:
线程开启具有执行资格,但是没有执行权,当CPU拿到执行权后线程才会被执行。
于是就有了2种状态:
①阻塞式:等待。有执行资格,木有执行权。
②冻结:睡眠。直接放弃执行权,直到他被唤醒。
灭亡:线程结束。
稍后会用一个实例来说明这个现象。
访问(多线程的安全同步 ?同步:不同步):
首先,需要一个共享资源, 因为是多个线程的同时访问,多个线程执行同一个方法,比如说CPU是四核的,那么一个核心执行一条线程,四个核心就执行了4条线程,并且是同时执行的,那么就出现了4个线程执行一个方法,所以多线程是不同步的,由于不同步那么如果我们如果要执行并发性的问题就不行了。
解决方案(前提是必须要有2条或者2条以上的线程,一条线程无需同步,并且这2条线程要共用一个锁的对象):
基于并发性问题,线程提供了一个同步代码块的功能,synchronize
执行多个方法,我们可以用 synchronize 将方法锁上,如图:
由于CPU执行太快,我们可以使用一个wait方法便于观看。