多线程是实现多任务系统的一种方式
1.[color=darkred]进程和线程的区别[/color][size=medium][/size]
[align=left] 进程实际上就是系统中运行的一个程序,有一块独立的内存空间,一个进程可以有多个线程
线程指的是进程中的一个执行流程,进程中的线程共享进程的内存[/align]
2.synchronized的一些东西
如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问[b]这个对象[/b]中任何一个synchronized方法
无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问。
[align=center]假设P1、P2是同一个类的不同对象,这个类中定义了以下几种情况的同步块或同步方法,P1、P2就都可以调用它们。[/align]
这个也就是同步方法,这时synchronized 锁定的是调用它的对象
实际上它的作用和下面的代码是一样的
这里1处的this指的就是调用这个方法的对象
methodB中和methodA的效果是一样的 都可以防止多个线程同时访问这个方法
1.[color=darkred]进程和线程的区别[/color][size=medium][/size]
[align=left] 进程实际上就是系统中运行的一个程序,有一块独立的内存空间,一个进程可以有多个线程
线程指的是进程中的一个执行流程,进程中的线程共享进程的内存[/align]
2.synchronized的一些东西
如果一个对象有多个synchronized方法,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问[b]这个对象[/b]中任何一个synchronized方法
无论synchronized关键字加在方法上还是对象上,它取得的锁都是对象,而不是把一段代码或函数当作锁――而且同步方法很可能还会被其他线程的对象访问。
[align=center]假设P1、P2是同一个类的不同对象,这个类中定义了以下几种情况的同步块或同步方法,P1、P2就都可以调用它们。[/align]
Public synchronized void methodA()
{
//….
}
这个也就是同步方法,这时synchronized 锁定的是调用它的对象
实际上它的作用和下面的代码是一样的
public void methodA()
{
synchronized (this) // (1)
{
//…..
}
}
这里1处的this指的就是调用这个方法的对象
Class Demo
{
public synchronized static void methodA() // 同步的static 函数
{
//….
}
public void methodB()
{
synchronized(Foo.class) // class literal(类名称字面常量)
}
}
methodB中和methodA的效果是一样的 都可以防止多个线程同时访问这个方法