Java创建多线程的两种方式对比
2023-06-13 09:15:30 时间
采用继承Thead类实现多线程:
优势:编写简单,如果需要访问当前线程,只需使用this即可,无需使用Thead.currentThread()方法。
劣势:因为这种线程类已经继承了Thead类,所以不能再继承其它类。
示例代码:
packageorg.frzh.thread;
publicclassFirstThreadextendsThread{
privateinti;
//重写run方法,run方法的方法体就是线程执行体
publicvoidrun(){
for(;i<100;i++){
//当线程类继承Thread类时,可以直接调用getName方法获得当前线程名
//如果想获得当前线程,直接使用this
//Thread对象的getName方法返回当前线程的名字
System.out.println(getName()+""+i);
}
}
publicstaticvoidmain(String[]args){
for(inti=0;i<100;i++){
//调用Thead的currentThread方法获取当前线程
System.out.println(Thread.currentThread().getName()+""+i);
if(i==20){
newFirstThread().start();
newFirstThread().start();
}
}
}
}
运行结果片段:
我们发现,在两个子线程中i的值并不连续,似乎与我们说的子线程直接共享数据不符。其实,在这里我们实例化了两个子线程,每个拥有自己的实例变量i。
采用实现Runable接口的多线程:
优势:线程类只是实现了Runable接口,因此还可以继承其他类;
在这种情况下,可以使多个线程共享一个target对象,所以非常适合多个线程用来处理同一份资源的情况,从而可以将cpu、代码和数据分开,形成清晰的模型,较好的体现面向对象思想。
劣势:编程略有些复杂,如果要访问当前线程必须使用Thread.currentThread方法。
示例代码:
packageorg.frzh.thread;
publicclassSecondThreadimplementsRunnable{
privateinti;
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
for(;i<100;i++){
System.out.println(Thread.currentThread().getName()+""+i);
}
}
publicstaticvoidmain(String[]args){
for(inti=0;i<100;i++){
System.out.println(Thread.currentThread().getName()+""+i);
if(i==20){
SecondThreadst=newSecondThread();
newThread(st,"子线程1").start();
newThread(st,"子线程2").start();
}
}
}
}
运行结果片段:
可以看到,此时的i值是连续变化的,因为线程1和2共享同一个target。
相关文章
- java生成时间戳类型_Java获取当前时间戳的方法有哪些
- java启动器_JAVA基础:Java 启动器如何查找类
- java编程软件下载_Ee Java(Java编程软件) V1.1.0 官方版
- java一个字符几个字节_Java 语言中一个字符占几个字节?
- 【测开技能】Java语言系列(十六)简单知识训练
- java如何获取当前日期和时间[通俗易懂]
- Java算法大全_java贪心算法几个经典例子
- List转set_JAVA数组转set内容不一致
- java创建线程池的几种方式_Java中的线程池
- java多线程
- 【Java】创建多线程的四种方式
- Java学习-如何编译适配java版本的jar包
- java并发编程(1):Java多线程-基本线程类-基础知识复习笔记
- java读写Properties文件详解编程语言
- Java Socket多线程编程示例详解编程语言
- Java多线程编程:变量共享分析(Thread)详解编程语言
- Java数据类型和MySql数据类型对应表详解编程语言
- Java多线程18:线程池详解编程语言
- Java多线程的实现方式
- 服务器实现Java远程访问Linux服务器(java远程linux)
- Java远程登录Linux服务器入门指南(java远程linux)
- 数据库实现Java程序与Oracle数据库的连接(java链接oracle)
- 失效操作Java操作Redis过期失效的实践(redisjava过期)
- Java轻松连接并执行MySQL数据库操作(java执行mysql)
- Java程序建立Oracle数据库表的实现方式(java建oracle表)
- Oracle和Java结合,推出新一代商城系统(java oracle商城)
- JAVA(Jsp)利用Google的Translate开发API的代码