Java基础知识学习

I am not happy. God bless me.

1.线程。新建一个线程的方法是extends Thread类。重写run方法。或者implements Runable接口。实现run方法。线程的方法:
a.void join() //等待终止指定的线程
b.void join(long millis)
c.Tread.State getState()
d.void setPrority(int new Prority)
e.static int MIN_PRIORITY
d.static void yield;

2.锁机制。java.util.concurrent.locks.lock类中方法:
           a.void lock();//获取一个锁,如果锁被其他对象拥有则阻塞
   b.unlock();//释放一个锁

  java.util.concurrent.locks.ReentrantLock
  a.reentrantLock()  :构建一个可以被用来保护临界区的可重入锁
          b.ReentratLock(boolean fair);//构建一个带有公平策略的锁

3.未捕获异常处理器

4.java.util.concurrent.locks.locks.Condition
a.void await(); //不满足条件的等待
b.void signalAll();//唤醒所有等待该条件的
c.void signal();//随机唤醒一个等待该条件的

5.synchronized关键字:
synchronized等同于 lock之后再unlock

6.将静态方法声明为synchronized也是合法的。如果调用该方法,该方法获得该对象的内部锁。别的对象就不能调用该方法了。

7.java.lang.Object
a.notifyAll()
b.notify();
c.wait();
d.wait(long millis)
8.同步阻塞. synchronized (obj)
    {
do something
    }
9.监视器:
a.监视器是只包含私有域的类
b.每个监视器类的对象有一个相关的锁
c.使用该锁对所有的方法进行加锁。
d.该锁可以有任意多个相关条件
如果一个方法用synchronized关键字则采用了监视器概念!

10.volatile域:valatile关键字为实例域的同步访问提供了一种免锁机制。如果声明一个域为volatile,那么编译器和虚拟机就知道该域是可能被另一个线程并发更新的。

11.死锁。要的资源互相得不到满足。

12.读写锁:
①构造一个ReentrantReadWriteLock();
private ReentrantReadWriteLock rwl = new ReentranReadWriteLock();
②抽取读锁和写锁
private Lock readLock = rwl.readLock();
private Lock writeLock = rwl.writeLock();
③对所有的访问者家读锁
readLock.lock
try
{

}
finally
{
readLock.unlock();
}
④对所有的修改者加写锁
writeLock.lock()
try
{
}
finally
{
writeLock.unlock();

14.阻塞队列:如果用队列当做线程管理工具来使用,将要用到put和take方法。当试图向满的队列中添加或从空的队列中中移除元素时,add、remove和eleme nt操作抛出异常!如果队列满则put方法阻塞;如果队列空则take方法阻塞。

15.内部类不能声明静态变量

16.  ArrayBlockQueue(int capactity) 构造一个指定大小的阻塞队列
     LinkedBlockQueue()
     DelayQueue();
     PriorityBlockQueue();//无边界阻塞优先队列
17.java.util.concurrent.BlockQueue<E> 接口的方法
a. void put() ;//添加一个元素
b. E take(); //移除一个元素
c. boolean offer(E element, long time, TimeUnit unit)

18.线程安全集合:

19.线程池(Thread pool):如果程序中创建了大量的生命期很短的线程,应该使用线程池。同时线程池可以控制最大并发线程的数目。并发的线程数量太大会大大降低系统性能。

20.执行器(Executeor):该类中有许多静态工厂方法构建线程池。

21.newCachedThreadPool方法构建一个线程池。对于每个任务如果有空闲线程,则执行,如果没有则创建.
   newCachedThreadPool方法构建一个具有固定大小的线程池。如果任务数大于空闲线程则将人物放到阻塞队列中。
   newSingleThreadExecutor大小为1的线程池

上述三个方法都实现了ExecutorService接口的ThreadPoolExecutor方法。

你可能感兴趣的:(java基础)