多线程与并发基本点

多线程

实现Runnable接口并编写run()方法,直接调用对象的run()方法不会产生任何内在的线程

必须将它提交给Thread类构造器,然后调用Thread对象的start()方法。

使用Runnable对象避免Java单继承的局限性,且能实现资源共享。

 

获取线程名称:Thread.currentThread.getName()

Java中所有线程同时启动,哪个抢占了CPU资源,哪个先运行(所有的线程调度都是建议?)

Java每次启动至少启动2个线程——主线程与垃圾回收

线程是否启动:t.isAlive()

线程强制运行:t.join() (线程调度排序)

线程中断:t.interupt()

线程休眠:Thread.sleep() (try catch )

线程礼让:Thread.yield()

后台线程:t.setDaemon(true)

 

优先级:MIN_PRIORITY、MORN_PRIORITY(mian方法的优先级)、MAX_PRIORITY

t.setPriority()

并非优先级一定会先执行,看CUP的对线程的调度。

 

同步:某段操作在同一个时间段只能有一个线程进行

代码块 synchronized{}

同步方法 public synchronized void XXX(){}

死锁:过多同步产生的矛盾问题

消费者与生产者的问题

生产消费先加同步,引入Object类对线程的支持——等待和唤醒,设置标志位,调用super.wait()和super.notify()

哲学家就餐问题:https://www.cnblogs.com/vettel/p/3438257.html

 

不建议使用线程组(持有一个线程集合)

线程池 Executor 管理Thread对象

在客户端和任务执行之间提供了一个间接层,由这个“执行器”作为中介执行任务。

ExecutoerService exec = Executoers.newCachedThreadPool();

exec.execute(Runnable target);

http://www.importnew.com/24923.html

 

Java内存模型:https://www.cnblogs.com/lewis0077/p/5143268.html

volatile关键字

 

多线程面试题:

http://www.importnew.com/29562.html

https://blog.csdn.net/ll666634/article/details/78615505

https://www.cnblogs.com/Jansens520/p/8624708.html

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