您的位置:首页 > 其它

多线程(1)

2015-07-02 20:50 141 查看

进程:就是应用程序在内存中分配的空间。(正在运行的程序)

线程:是进程中负责程序执行的执行单元,也称为执行路径。

一个进程中至少有一个线程在负责该进程的运行。

如果一个进程出现了多个线程,就称该程序为多线程程序。

多线程技术:解决多部分代码同时执行的需求,合理的使用cpu资源

多线程的运行根据cpu的切换完成的,怎么切换cpu说的算,

所以多线程运行有一个随机性(cpu的快速切换造成的)

jvm中的多线程。

至少有两个线程:一个是负责自定义代码运行的,这个从main方法开始执行的线程称之为主线程。

一个是负责垃圾回收的。

通过实验,会发现每次结果不一定相同,因为随机性造成的。

而且每一个线程都有运行的代码内容,这个称之为线程的任务。

之所以创建一个线程就是为了去运行制定的任务代码。

而线程的任务都封装在特定的区域中,

比如: 主线程运行的任务都定义在main方法中,垃圾回收线程在收垃圾都会运行finalize方法

** 如何建立一个执行路径呢?

api文档,java.lang.Thread类

该类的描述中有创建线程的两种方式:

** 第一种方式:

1,继承Thread类

2,覆盖run方法

3,创建子类对象就是创建线程对象

4,调用Thread类中的start方法执行线程。并会调用run方法。

start()开启线程后,都会执行run方法。说明run方法中存储的是线程要运行的代码

所以,记住,自定义线程的任务代码都储存在run方法中。

调用start和调用run方法的区别?

调用start会开启线程,让开启的线程去执行run方法中的线程任务。

直接调用run方法,线程并未开启,去执行run方法的只有主线程。

Thread.current.Thread()//当前线程

**创建线程的第二种方式,实现Runnable接口:

1,定义一个类实现Runnable。

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

3,通过Thread类创建线程对象,并将实现了Runnable接口的对象作为Thread类的构造函数的参数进行传递

4,调用Thread类的start方法,开启线程。

实现Runnable接口的好处:

1,避免了继承Thread类单继承的局限性。

2,Runnable接口出现更符合面向对象,将线程进行对象的封装。

3,Runnable接口出现,降低了线程对象和线程任务的耦合性。

所以,以后创建线程都使用第二种方式。

多线程的安全问题:

产生的原因:

1,线程任务中有处理到的共享的数据。

2,线程任务中有多条对共享数据的操作

一个线程在操作共享数据的过程中,其他线程参与了运算,造成了数据的错误。

解决的思想:

只要保证多条操作共享数据的代码在某一时间段,被一条线程所执行 ,

在执行期间不允许其他线程参与运算。

怎么保证?

用到同步代码块。

synchronized(对象(obj))

{

需要被同步的代码

}

同步在目前情况下保证了一次只能有一个线程在执行,其他线程进不来

这就是同步的锁机制

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

弊端:减低效率。

有可能出现一种情况:

多线程安全问题出现后;加入了同步机制,没有想到,安全问题依旧! 咋办,

这时肯定是同步出了问题

只要遵守了同步的前提,就可以解决。

同步的前提:

多个线程在同步中必须使用同一个锁,这才是对多个线程同步。


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: