张龙老师线程的笔记

来源:互联网 发布:湖南网络危机公关公司 编辑:程序博客网 时间:2024/04/28 13:11

同步的前提必须满足:

                 1、必须有两个或者两个以上的线程;

                 2、必须是多个线程使用同一把锁。

          必须保证同步中只能有一个线程能运行


1) Thread 类也实现了 Runnable 接口,因此实现了 Runnable 接口中的 run 方法;
2) 当生成一个线程对象时,如果没有为其设定名字,那么线程对象的名字将使用如下
形式:Thread-number,该 该 number  将是自动增加的,并被所有的 Thread  对象所共享
( 因为它是 static  的成员变量) )
  。
3) 当使用第一种方式来生成线程对象时, 我们需要重写 run 方法, 因为 Thread 类的 run
方法此时什么事情也不做。
4) 当使用第二种方式来生成线程对象时,我们需要实现 Runnable 接口的 run 方法,然
后使用 new Thread(new MyThread())(假如 MyThread 已经实现了 Runnable 接口)来
生成线程对象,这时的线程对象的 run 方法就会调用 MyThread 类的 run 方法,这样
我们自己编写的 run 方法就执行了。
12. 关于成员变量与局部变量:如果一个变量是成员变量,那么多个线程对同一个对象
的成员变量进行操作时,他们对该成员变量是彼此影响的(也就是说一个线程对成
员变量的改变会影响到另一个线程) 。
13. 如果一个变量是局部变量,那么每个线程都会有一个该局部变量的拷贝,一个线程
对该局部变量的改变不会影响到其他的线程。
14. 停止线程的方式: 不能使用 Thread 类的 stop 方法来终止线程的执行。 一般要设定一
个变量,在 run 方法中是一个循环,循环每次检查该变量,如果满足条件则继续执
行,否则跳出循环,线程结束。
15. 不能依靠线程的优先级来决定线程的执行顺序。
16. synchronized 关键字:当 synchronized 关键字修饰一个方法的时候,该方法叫做同步
方法。
17. Java  中的每个对象都有一个锁(lock ) 或者叫做监视器(monitor) )  ,当访问某个对
象的 synchronized  方法时, 表示 将该对象上锁 ,此时其他任何线程都无法再去访问
该 该 synchronized  方法了, 直到之前的那个线程执行方法完毕后 ( 或者是抛出了异常) )  ,
那么将该对象的锁释放掉,其他线程才有可能再去访问该 synchronized  方法。
18. 如果一个对象有多个 synchronized 方法,某一时刻某个线程已经进入到了某个
synchronized 方法, 那么在该方法没有执行完毕前, 其他线程是无法访问该对象的任
何 synchronized 方法的。1) Thread 类也实现了 Runnable 接口,因此实现了 Runnable 接口中的 run 方法;
2) 当生成一个线程对象时,如果没有为其设定名字,那么线程对象的名字将使用如下
形式:Thread-number,该 该 number 将是自动增加的,并被所有的 Thread 对象所共享
( 因为它是 static 的成员变量) ) 。
3) 当使用第一种方式来生成线程对象时, 我们需要重写 run 方法, 因为 Thread 类的 run
方法此时什么事情也不做。
4) 当使用第二种方式来生成线程对象时,我们需要实现 Runnable 接口的 run 方法,然
后使用 new Thread(new MyThread())(假如 MyThread 已经实现了 Runnable 接口)来
生成线程对象,这时的线程对象的 run 方法就会调用 MyThread 类的 run 方法,这样
我们自己编写的 run 方法就执行了。
12. 关于成员变量与局部变量:如果一个变量是成员变量,那么多个线程对同一个对象
的成员变量进行操作时,他们对该成员变量是彼此影响的(也就是说一个线程对成
员变量的改变会影响到另一个线程) 。
13. 如果一个变量是局部变量,那么每个线程都会有一个该局部变量的拷贝,一个线程
对该局部变量的改变不会影响到其他的线程。
14. 停止线程的方式: 不能使用 Thread 类的 stop 方法来终止线程的执行。 一般要设定一
个变量,在 run 方法中是一个循环,循环每次检查该变量,如果满足条件则继续执
行,否则跳出循环,线程结束。
15. 不能依靠线程的优先级来决定线程的执行顺序。
16. synchronized 关键字:当 synchronized 关键字修饰一个方法的时候,该方法叫做同步
方法。
17. Java 中的每个对象都有一个锁(lock ) 或者叫做监视器(monitor) ) ,当访问某个对
象的 synchronized 方法时, 表示 将该对象上锁 ,此时其他任何线程都无法再去访问
该 该 synchronized 方法了, 直到之前的那个线程执行方法完毕后 ( 或者是抛出了异常) ) ,
那么将该对象的锁释放掉,其他线程才有可能再去访问该 synchronized 方法。
18. 如果一个对象有多个 synchronized 方法,某一时刻某个线程已经进入到了某个
synchronized 方法, 那么在该方法没有执行完毕前, 其他线程是无法访问该对象的任
何 synchronized 方法的。


1. 如果某个 synchronized 方法是 static 的,那么当线程访问该方法时,它锁的并不是
synchronized 方法所在的对象, 而是 synchronized  方法所在的对象 所对应的 Class  对
为 象,因为 Java  中无论一个类有多少个对象,这些对象会对应唯一一个 Class 对象,
因此当线程分别访问同一个类的两个对象的两个 static,synchronized 方法时,他们
的执行顺序也是顺序的,也就是说一个线程先去执行方法,执行完毕后另一个线程
才开始执行。

2. synchronized 块,写法:
synchronized(object)
{
}
表示线程在执行的时候会对 object 对象上锁。
3. synchronized 方法是一种粗粒度的并发控制,某一时刻,只能有一个线程执行该
synchronized 方法;synchronized 块则是一种细粒度的并发控制, 只会将块中的代码同
步,位于方法内、synchronized 块之外的代码是可以被多个线程同时访问到的。



0 0