--------------------android培训、java培训、期待与您交流! ------------------
1、什么叫做进程? 什么叫做线程? 线程与进程的区别?
在操作系统中,每个独立执行的程序称为进程,也就是正在进行的程序。我们现在使用的操作系统一般都是多任务的,即能够同时执行多个应用程序。实际情况是,操作系统负责对CPU等设备的资源进行分配和管理,虽然这些设备某一时刻只做一件事,但以非常小的时间间隔交替执行多个程序,就可以给人以同时执行多个程序的感觉。
进程是程序的一次动态执行过程,它经历了从代码加载,执行到执行完毕的一个完整过程,这个过程也是进程本身从产生,发展到最终消亡的过程.多进程操作系统能同时运行多个进程(程序),由于cpu具备分时机制,所以每个进程都能循环获得自己的cpu时间片。由于cpu执行速度非常快,使得所有的程序好像在”同时”运行一样。
线程是比进程更小的执行单位,线程是在进程的基础之上进行的进一步划分.所谓多线程是指一个进程在执行过程中可以产生多个线程,这些线程可以同时存在, 同时运行,形成多条执行线索,一个进程可能包含了多个同时执行的线程
每个进程都需要操作系统为其分配独立的内存地址空间,而同一进程中的所有线程在同一块地址空间中工作。这些线程可以共享进程的状态和资源。
一个采用了多线程技术的应用程序可以更好地利用系统资源。其主要优势在于充分利用了CPU的空闲时间片,可以用尽可能少的时间来对用户的要求做出响应,使得进程的整体运行效率得到较大提高,同时增强了应用程序的灵活性。更为重要的是,由于同一进程的所有线程是共享同一内存,所以不需要特殊的数据传送机制,不需要建立共享存储区或共享文件,从而使得不同任务之间的协调操作与运行、数据的交互、资源的分配等问题更加易于解决。
2、线程的创建
线程的创建方式
多线程的安全问题:
每个线程都会有一个运行的时间片,都会有开始和时间片到期的时候。
所以我们要注意了:一个线程的时间片到期的时候,此线程有可能执行到程序的任何一个位置而被暂停,并没有完全执行完一个原子性的模块,然后就进入时间片的轮换,这样就导致多线程的运行结果不可意料。此时我们就需要对线程进行同步处理。
线程同步关键字是:synchronized
同步代码块:
synchronized(obj)
{
需要同步的代码;
}
同步方法:只须在方法前加synchronized关键字修饰即可。
同步非静态方法的监视器是this,而同步静态方法的监视器是当前所在的类的Class对象。
只要使用相同的同步对象(监视器),synchronized方法和synchronized代码块也可以实现同步。
那么之前说到的饿汉式单例模式就可以进一步的进行处理:
单例模式-懒汉式举例:
class
{
private
private
private
{}
public
{
If(s==null)
{
Synchronized(Stu.class)
{
If(s==null)
s=new
}
}
return
}
public
{
this.age
}
public
{
return
}
}
在编写多线程同步的时候一定要注意避免死锁的发生。下面是死锁的例子:
class
{
private
Test(boolean
{
this.flag
}
public
{
if
{
synchronized(MyLock.locka)
{
System.out.println("if
synchronized(MyLock.lockb)
{
System.out.println("if
}
}
}
else
{
synchronized(MyLock.lockb)
{
System.out.println("else
synchronized(MyLock.locka)
{
System.out.println("else
}
}
}
}
}
class
{
static
static
}
class
{
public
{
Thread
Thread
t1.start();
t2.start();
}
}
--------------------android培训、java培训、期待与您交流! ------------------