java多线程学习笔记(高级)

时间:2022-04-22 17:31:44
1.进程和进程之间的内存是独立的。
2.多进程的程序是为了提高CPU的使用率。
3.多线程不是为了提高执行速度,而是为了提高应用程序的使用率。
4.线程和线程共享“堆内存和方法区内存”,栈内存是独立的也就是说一个线程一个栈。
5.关于java程序的运行原理:java命令会启动java虚拟机JVM,也就等同于启动了一个应用程序(进程)。该进程会启动一个“主线程”,该主线程会启动某一个类的main方法,所以主线程运行在主线程中。
6.t.stare();//该方法执行瞬间结束,就是告诉JVM分配一个新的线程栈给线程t。也就是说main()方法结束,程序不一定结束。这个新的栈调用run()方法。
7.t.run();//这是普通方法调用,只有一个线程,当前run方法结束之后下面的程序才会执行。
8.Thread.sleep();该方法是一个静态方法,作用是阻塞当前线程。 这个方法在那个线程中就阻塞的是哪个线程。
9.t03.interrupt();// 唤醒t03线程。中段线程的休眠。使用的是异常处理机制。触发InterruptedException的异常。
10.如何正确的终止我们的线程,使用全局变量,改变全局变量的值,解除休眠。一般使用boolean类型。
11.Java线程调度yield与join     http://www.cnblogs.com/tankaixiong/articles/4737014.html  (线程让位和线程合并)。
12.异步编程模型:t1,t2 两个线程,t1线程执行t1的,t2线程执行t2的,两个线程直接没有相互的等待。
13.同步编程模型:t1,t2 两个线程,t2线程的执行必须得等待t1线程执行结束才能执行。
14.使用线程同步的条件
   1),必须存在多线程环境。
   2),多线程存在共享同一数据。
   3),共享数据涉及到修改操作。
15.关于线程同步的 synchronized 的使用方法。
   1),synchronized(this){ //共享代码块}  也就是说由synchronized包住的代码块添加了锁,当一个线程获得了该锁,则其他线程只能等待该线程释放该锁之后才能执行。
   2),synchronized 可以修饰某个方法,例如: public synchronized void takeMoney(double money){} 表示为该方法添加了锁。调度如上。
   3),synchronized 可以修饰某个static 方法,表示添加了类锁,线程在调用该方法的时候会调用类锁。类锁只有一个。
16.关于守候线程:线程可以分为用户线程和守候线程。我们上面所以的线程都是用户线程。守候线程守候的是用户线程,就是还有一个用户线程还在运行的话,守候线程也是不会停止工作的。java中的垃圾回收机制就是一个守候线程。 守护线程一般是无限循环的,可以将一个将一个用户线程t1设置t1.setDaemon(true);标记为守候线程。
17.java.util.Timer 是一个定时任务类。里面有一个 public void schedule(TimerTask task, Date firstTime, long period);方法。
18.线程之间的通信