Java多线程学习笔记(高级)重点

对于Java多线程的一些使用总结:

  • 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  (线程让位和线程合并)。

join方法:

线程实例的join()方法可以被用来join到线程执行的开始和其他线程执行的结束,所以直到其他线程运行结束这个线程才会执 行。如果join的方法在线程实例中被调用,当前运行的线程会被堵塞,直到线程实例运行完成。

如 :线程a中调用线程b的join方法,这时线程a就会进入阻塞状态,直到线程b执行

yield方法:

yield的意思是放弃,投降的意思。其实调整的是线程优先级。当前线程调用yield的时候,告诉虚拟机它愿意让其他的线程抢占自己的位置。者表明该线程没有紧急的事要做,但这只是一种暗示,并不能保证一定会发生。

 

  • 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.线程之间的通信
  • 19.ThreadLocal是指的线程上下文,本身ThreadLocal是一个全局变量,但是在不同线程种可以set不同的指,而这些值之间又不会互相影响。本线程set的值之和本线程有关。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 精致技术 设计师:CSDN官方博客 返回首页