【Java基础】线程笔记——创建线程的3种方式
来源:互联网 发布:看图软件安卓版 编辑:程序博客网 时间:2024/05/17 22:11
最直接——继承Thread类
public class ThreadA extends Thread { @Override public void run() { try { Thread.sleep(500L); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("This is Thread A From Extending Thread Class"); }}
最常用——实现Runable接口
相比继承Thread类,实现Runable接口有以下优势
- 避免 Java 的单继承特性而带来的局限;
- 增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的;
- 适合多个相同程序代码的线程区处理同一资源的情况。
public class ThreadB implements Runnable { @Override public void run() { try { Thread.sleep(1000L); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("This is Thread B From Implements Runnable "); }}
返回值——Callable
public class ThreadC implements Callable<String>{ @Override public String call() { try { Thread.sleep(1800L); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("This is Thread C From Implements Callable"); return "Thread C"; }}
启动
public static void main(String[] args) { ThreadA a = new ThreadA(); a.start(); ThreadB b = new ThreadB(); new Thread(b).start(); ThreadC c = new ThreadC(); FutureTask<String> task = new FutureTask<>(c); System.out.println("This is Main Thread -----> Begin"); new Thread(task).start(); try { System.out.println("result is ------>"+task.get());; } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } System.out.println("This is Main Thread -----> End");}
console
This is Main Thread -----> BeginThis is Thread A From Extending Thread ClassThis is Thread B From Implements Runnable This is Thread C From Implements Callableresult is ------>Thread CThis is Main Thread -----> End
线程指的是程序中的执行线程,在JavaVM种允许程序并发运行多个执行线程
每个线程有个优先级(高优先级执行优先于低优先级线程)
每个线程都可以或不可以标记为一个守护线程(后台运行的线程)
JavaVM启动时,最开始创建一个非守护线程(用来启动某个类指定的main方法),遇到下面情况线程才会停止执行
① 调用Runtime的exit()
② 安全管理器允许退出发生
③ 非守护线程全部停止执行
线程主要方法
currentThread() //获取当前线程yield() //暂停当前线程,执行其他线程sleep() //休眠start() //启动线程run() //如果线程是Runable构造,则调用Runable种run方法,否则,该方法不执行任何操作返回interrupt() //中断线程interrupted() //测试当前线程是否已经中断getPriority() //得到优先级getName() //线程名称getId() //线程唯一标识join() //等待该线程终止setDeamon() //设置守护线程activeCount() //当前线程的线程组活动线程checkAccess()//当前运行的线程是否有权修改该线程dumpStack() //当前线程的堆栈跟踪打印导标准错误流getContextClassLoader() //返回线程上下文getStackTrace() //返回活动线程堆栈跟踪的活动线程getState() //返回该线程状态getThreadGroup() //获取线程组
0 0
- 【Java基础】线程笔记——创建线程的3种方式
- Java线程——两种创建线程的方式
- 黑马程序员——java基础——Java中创建线程的两种方式
- java 创建线程的3种方式
- java线程的3种创建方式
- java基础关于创建线程的两种方式
- Java基础:多线程之线程创建的两种方式
- 【Java基础】:线程的三种创建方式对比分析
- 线程创建的两种方式01--Java基础067
- 线程创建的两种方式02--Java基础068
- Java——线程创建两种方式的对比
- Java——创建线程的三种方式
- Java——创建线程的两种方式
- 线程基础—线程的创建
- java线程(1)——三种创建线程的方式
- java中的线程(一)——线程的五种状态和线程的创建方式
- java 创建线程 的两种方式
- java创建线程的三种方式
- Java初学(一)- helloworld
- [PHP] PHP操作Excel导出和导入,使用PHPExcel第三方类操作
- 活跃度的爬虫开发(一)
- Android 6.0 运行时权限处理完全解析
- PHPExcel在高版本PHP7中,Writer->save出现ERR_INVALID_RESPONSE错误的解决方法
- 【Java基础】线程笔记——创建线程的3种方式
- Oracle数据库在操作系统中实用工具的介绍
- Apache Spark Jobs 性能调优(一)
- 在CSDN中如何转载别人文章
- Activity的四种启动模式
- Guetzli压缩rgba文件为jpg格式(google新出的压缩图片算法)
- PostMan的使用
- Java调用orcal数据库存储过程实现分页
- redis