java多线程笔记

Synchronized

Synchronized锁定类,锁住的是类字节码对象

总结:

1、 无论synchronized关键字加在方法上还是对象上,如果它作用的对象是非静态的,则它取得的锁是对象;如果synchronized作用的对象是一个静态方法或一个类,则它取得的锁是对类,该类所有的对象同一把锁

 2、 每个对象只有一个锁与之关联,谁拿到这个锁谁就可以运行它所控制的那段代码

 3、 实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无所谓的同步控制

一个程序至少有一个进程,一个进程至少有一个线程 进程在执行过程中拥有独立的内存但单元,而多个线程共享内存,极大的提高了程序运行的效率

Start方法:

此方法不会被主要方法线程or由虚拟机创建的系统组线程调用, 任何向此方法添加的新功能方法在未来都会被添加到虚拟机中。

Yield方法:

是一个本地方法,提示线程调度器当前线程愿意放弃当前CPU的使用。如果当前资源不紧张,调度器可以忽略这个提示,本质上线程状态一直是runable,不会发生阻塞。

每个锁对象有两个队列:就绪队列和阻塞队列

就绪队列:存储将要获得锁的线程

阻塞队列:存储被阻塞的线程

对象锁:每个对象都有对象锁,当某个线程进入用synchronized定义的方法时,就获得当前类对象(方法所属的类的对象)的锁,其他线程就不能再获得该锁,直到线程释放该锁。一个类对象有一个对象锁,多个同步方法公用一个对象锁。

Wait()方法:调用wait()方法会挂起当前线程,并释放共享资源的锁

Notify()方法:调用任意对象的notify()方法会在因调用该对象的wait()方法而阻塞的线程中随机选择一个线程接触阻塞,但要等到获得锁后才可真正执行

NotifyAll()方法:调用了norify()方法会因调用该对象的wait()方法而阻塞的所有线程一次性全部解除阻塞。

Wait() norify() notifyALl() 这三个方法都是Object类中的final方法,被所有的类继承且不允许重写,并且只能在同步方法中使用,否则会抛出异常。

Thread.currentThread() 返回当前线程的对象。

线程优先级:

每个线程的优先级都介于Thread.MIN_PRIORITY 和 Thread.MAX_PRIORITY之间

多线程有两种实现方法,分别是继承Thread类和实现Runnable接口

同步的实现方法有两种,分别是synchronized,wait和notify

线程的基本状态以及状态之间的关系: Java中的线程有四种状态,分别是:运行,就绪,挂起,结束。

 

陆续更新中~~

原文地址:https://www.cnblogs.com/dreamzj/p/14324028.html