run()与异常 不管是Threade还是Runnable的run()方法都没有定义抛出异常,也就是说一条线程内部发生的checked异常,必须也只能在内部用try-catch处理掉,不能往外抛,因为线程是一个独立运行的代码片段,它的问题不能影响到其他线程 如果run()内部抛出一个unchecked异常,这个线程可能会终止运行,这个异常也不能被主线程捕获,也影响不到其他线程的执行,比如下面的示例: package testpack; import java.io.IOException; pu…
什么是线程池 创建线程,因为涉及到跟操作系统交互,比较耗费资源.如果要创建大量的线程,而每个线程的生存期又很短,这时候就应该使用线程池了,就像数据库的连接池一样,预先开启一定数量的线程,有任务了就将任务传递进去,任务执行完毕不终止线程,等待下一个任务 线程池的种类 ExecutorService: 这是个接口,代表尽快执行的线程池,只要有空闲进程,就立即执行 Future<?> submit(Runnable task) 将Runnable对象提交给线程池,线程池有空闲线程时执行任务,返回的F…
线程isInterrupted方法: isInterrupted()是Thread对象的方法,测试线程是否已经中断. public class ThreadRunMain { public static void main(String[] args) { testMainIsInterruptThread(); } public static void testMainIsInterruptThread(){ Thread.currentThread().interrupt(); System…
线程interrupted方法: interrupted()是Thread类的方法,用来测试当前线程是否已经中断. public class InterruptThread extends Thread{ @Override public void run() { for (int i = 0; i< 5000000; i++){ System.out.println("i=" + (i + 1)); } } } public class ThreadRunMain { publ…
线程sleep方法: 单主线程使用sleep: Main线程差了2000毫秒. public class MainSleepThread extends Thread{ @Override public void run() { try { System.out.println(this.currentThread().getName() + " begin"); Thread.sleep(2000); System.out.println(this.currentThread().g…
线程interrupt方法: interrupt方法是用来停止线程的,但是他的使用效果并不像for+break那样,马上就停止循环. 调用interrupt()其实仅仅是在当前线程中打了一个停止标记,并没有真正的停止线程. 在下面的例子中,可以看出在interrupt()方法后的语句仍然被执行了. public class ThreadRunMain { public static void main(String[] args) { testMainInterruptThread(); } p…
join线程 假如A线程要B线程去完成一项任务,在B线程完成返回之前,不进行下一步执行,那么就可以调用B线程的join()方法 join()方法的重载: join():等待不限时间 join(long millis):等待millis毫秒 join(long millis,int nanos):很少用,等待毫秒+毫微秒 看示例: package testpack; public class Test2 { public static void main(String[] args) throws…
isAlive方法: 方法isAlive()功能是判断当前线程是否处于活动状态. 活动状态就是线程启动且尚未终止,比如正在运行或准备开始运行. public class IsAliveThread extends Thread { public IsAliveThread() { System.out.println("begin"); System.out.println("Thread.currentThread().getName() : " + Thread…
创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行的代码 继承java.lang.Thread创建线程 public class Test1 { public static void main(String[] args){ System.out.println("现在是主线程: "+Thread.currentThread()); //…
什么是同步 在上一篇0036 Java学习笔记-多线程-创建线程的三种方式示例代码中,实现Runnable创建多条线程,输出中的结果中会有错误,比如一张票卖了两次,有的票没卖的情况,因为线程对象被多条线程访问,一条线程在执行一个循环的过程中被中断,下一个线程则出现错误 因此,线程任务中可能引起错误的地方应当被一次执行完毕 同步代码块 用同步代码块改写上面的代码 package testpack; public class Test1 { public static void main(Strin…