/**
* 获取当前线程Thread.currentThread()
* join()方法,调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的线程执行完为止
* setDaemon(true)方法将指定线程设为后台线程
* isDaemon()方法判断指定线程是否为后台进程
* 调用Thread.sleep(1)方法让当前线程暂停1ms
* 调用Thread.yield()方法是暂停一下当前线程,使当前线程转为就绪状态,重新调度()
* Thread.yield()同Thread.sleep(1)相似,都是使当前线程暂停,
* 不同点:Thread.sleep(1)使当前线程阻塞,Thread.sleep(1)不会阻塞,还可能继续执行此线程
* 改变线程优先级:d.setPriority(2)数值越大,优先级越高
* 同步代码块synchronized(obj){}与同步方法,
* 同步方法,无须显示指定同步监视器,同步方法的同步监视器是this,也就是该对象本身
* 同步锁private final ReentrantLock lock = new ReentrantLock();
* 对同步锁进行加锁lock.lock();
* 使用finally确保释放锁finally{lock.unlock();}
* 线程池:系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互。在这种情况下,使用线程池可以很好的提高性能,
* 尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池
* 1.创建一个具有固定线程数的线程池ExecutorService pool = Executors.newFixedThreadPool(6);
* 2.向线程池中提交一个线程pool.submit(new DrawThread("甲", account, 800));
* 3.关闭线程池pool.shutdown();
*/
* 获取当前线程Thread.currentThread()
* join()方法,调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的线程执行完为止
* setDaemon(true)方法将指定线程设为后台线程
* isDaemon()方法判断指定线程是否为后台进程
* 调用Thread.sleep(1)方法让当前线程暂停1ms
* 调用Thread.yield()方法是暂停一下当前线程,使当前线程转为就绪状态,重新调度()
* Thread.yield()同Thread.sleep(1)相似,都是使当前线程暂停,
* 不同点:Thread.sleep(1)使当前线程阻塞,Thread.sleep(1)不会阻塞,还可能继续执行此线程
* 改变线程优先级:d.setPriority(2)数值越大,优先级越高
* 同步代码块synchronized(obj){}与同步方法,
* 同步方法,无须显示指定同步监视器,同步方法的同步监视器是this,也就是该对象本身
* 同步锁private final ReentrantLock lock = new ReentrantLock();
* 对同步锁进行加锁lock.lock();
* 使用finally确保释放锁finally{lock.unlock();}
* 线程池:系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互。在这种情况下,使用线程池可以很好的提高性能,
* 尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池
* 1.创建一个具有固定线程数的线程池ExecutorService pool = Executors.newFixedThreadPool(6);
* 2.向线程池中提交一个线程pool.submit(new DrawThread("甲", account, 800));
* 3.关闭线程池pool.shutdown();
*/