public class Test1 extends Thread{ public void run(){ // } } public class Test2 immplement Runnable{ public void run(){ // } } public class Main{ public static void main(String[] args){ //创建并启动线程 MyThread2 myThread=new MyThread2(); Thread thread=new Thread(myThread); thread().start(); //或者 new Thread(new MyThread2()).start(); } }
使用callable和future创建线程
进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元
虚拟内存,是将进程部分装入内存中
Callable的call()方法可以返回装载计算结果的future对象和抛出异常,Runnable的run()方法没有
notify()方法不能唤醒某个具体的线程,所以只有一个线程在等待的时候它才有用武之地。而notifyAll()唤醒所有线程并允许他们争夺锁确保了至少有一个线程能继续运行。
为什么wait, notify 和 notifyAll这些方法不在thread类里面? 是JAVA提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得。如果线程需要等待某些锁那么调用对象中的wait()方法就有意义了。
https://www.cnblogs.com/dongyu666/p/6971783.html
单例类
public class Test{ private static Test test; private static Test(); public static synchronized Test getInstance(){ if(test==null) { test = new Test(); } return test; } }
双重检查
public class Test{ private static Test test; private static Test(); public static synchronized Test getInstance(){ if(test==null) { sychronized (Test.class){ if(test==null){ test = new Test(); } } } return test; } }
volatile
public class Test{ private static volatile Test test; private static Test(); public static synchronized Test getInstance(){ if(test==null) { sychronized (Test.class){ if(test==null){ test = new Test(); } } } return test; } }
乐观锁
update student set num,version=version+1 where id=#{id} and version=#{version}
要么在应用层加锁,要么在缓存层加锁,要么在数据库层加锁
线程池是java.util.concurrent.executors提供的executor接口创建的线程池
线程池组成:线程池管理器、工作线程、任务接口、任务队列
常见的四种线程池:
1.newSingleThreadExecutor单个线程线程池,只有一个线程的线程池,阻塞队列使用的是LinkedBlockingQueue,若有多余的任务提交到线程池中,则会被暂存到阻塞队列,待空闲时再去执行。按照先入先出的顺序执行任务。
2.newFixedThreadPool固定大小的线程池,可以指定线程池的大小,该线程池corePoolSize和maximumPoolSize相等,阻塞队列使用的是LinkedBlockingQueue,大小为整数最大值。
3.newCachedThreadPool
可缓存线程池,当线程池大小超过了处理任务所需的线程,那么就会回收部分空闲(一般是60秒无执行)的线程,当有任务来时,又智能的添加新线程来执行。
4.newScheduleThreadExecutor
大小无限制的线程池,支持定时和周期性的执行线程
http://blog.csdn.net/zxm1306192988/article/details/59701101
http://blog.csdn.net/zxm1306192988/article/details/59701101
https://www.cnblogs.com/aspirant/p/6920418.html
http://blog.csdn.net/lirenzuo/article/details/75209123