/***************************继承Thread类创建多线程************************/
public class FirstThread extends Thread{
private int i;//继承Thread创建线程不共享实例变量
public void run()
{
for (; i < 10; i++) {
System.out.println(getName()+" "+i);//通过this.getName()获得线程名称
}
}
public static void main(String[] args)
{
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName()+" "+ i);
if(i == 20)
{
new FirstThread().start();
new FirstThread().start();
}
} }
}
/************************实现Runnable接口创建多线程*************************/
public class SecondThread implements Runnable
{
private int i;//继承Runnable接口共享实例变量
public void run()
{
for(;i < 100; i++)
{
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {//继承Runnable接口要通过Tread.currentThread()获得当前进程
System.out.println(Thread.currentThread().getName()+" "+i);
if(i == 20)
{
SecondThread st = new SecondThread();//Runnable对象作为Thread对象的target
new Thread(st, "新线程1").start();
new Thread(st, "新线程2").start();
}
}
}
}
/************************使用Callable和Future创建线程********************************/
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class ThirdThread {
public static void main(String[] args)
{ //FutureTask类包装了Callable对象,封装了Callable对象的call()方法。
//call()方法可以有返回值,也可以声明抛出异常。
FutureTask<Integer> task = new FutureTask<Integer>((Callable<Integer>)()->{
int i = 0;
for(; i < 100; i ++)
{
System.out.println(Thread.currentThread().getName()+" 的循环变量i的值:"+i);
}
return i;
}); for (int i = 0; i < 100 ; i++) {
System.out.println(Thread.currentThread().getName()+" 的循环变量的值:"+i);
if(i == 20)
{
new Thread(task, "有返回值的线程").start();//task作为Thread类的target
}
}
try
{
System.out.println("子线程的返回值:" + task.get());//get()获取返回值
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

java创建多线程的三种方式的更多相关文章

  1. Java并发编程:Java创建线程的三种方式

    目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...

  2. java创建线程的三种方式及其对比

    第一种方法:继承Thread类,重写run()方法,run()方法代表线程要执行的任务.第二种方法:实现Runnable接口,重写run()方法,run()方法代表线程要执行的任务.第三种方法:实现c ...

  3. AJPFX总结java创建线程的三种方式及其对比

    Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行 ...

  4. java创建线程的三种方式及其对照

    Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类.并重写该类的run方法,该run方法的方法体就代表了线程要完毕的任务.因此把run()方法称为运行 ...

  5. Java创建多线程的三种方法

    Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没 ...

  6. Java实现多线程的三种方式

    Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.前两种方式启动的线程没有返回值 ...

  7. Java创建线程的三种方式

    一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...

  8. [JAVA]JAVA实现多线程的三种方式

    1.继承Thread类,通过start()方法调用 public class MultiThreadByExtends extends Thread { @Override public void r ...

  9. Java 实现多线程的三种方式

    import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class Main { pu ...

随机推荐

  1. [Spring Data MongoDB]学习笔记--建立数据库的连接

    1. 有了上一篇的Mongo后,连接数据库我们还需要更多的信息,比如数据库名字,用户名和密码等. 我们可以继续来配置MongoDbFactory的实例. public interface MongoD ...

  2. ACM至大二省赛小结

    大一进acm坑的,大一上就学了个c,下才学c++,不过 c 学完后学 c++ 感觉很简单,应该是大一下开学左右才开始刷题的,前面都在水???然后因为acm协会有各种月赛校赛什么的,班主任的提醒较多,所 ...

  3. Linq 基本操作

    在linq中排序方法有: OrderBy()  --对某列升序排序 ThenBy()    --某列升序后对另一列后续升序排序 OrderByDescending() --对某列降序排序 ThenBy ...

  4. 巨蟒python全栈开发linux之centos6 第二篇

    1. .nginx负载均衡的实现 .准备三台机器,准备3台虚拟机,或者和俩同桌交流一下 192.168.226.128 是nginx资源服务器,返回页面的 192.168.226.129 用作ngin ...

  5. mongodb安全配置

    1. 为数据库增加管理员 use admin db.createUser({ >user:'userName', pwd:'password', roles:[{role:'userAdminA ...

  6. 高并发服务器建议调小 TCP 协议的 time_wait 超时时间

    说明:操作系统默认 240 秒后,才会关闭处于 time_wait 状态的连接,在高并发访问下,服 务器端会因为处于 time_wait 的连接数太多,可能无法建立新的连接,所以需要在服务器上 调小此 ...

  7. diy 重要的不是这个工具怎么解决了问题

    w 0-这个工具解决了什么问题? 1-diy,怎么解决这个工具解决了的问题? 2-是否diy实现?实现了,对比,优化:反之,分析借鉴,吸收优化. 重要的不是git怎样解决了git已经解决的问题.

  8. 基于Mesos和Docker的分布式计算平台

    基于Mesos和Docker的分布式计算平台 http://www.csdn.net/article/2015-06-09/2824906

  9. 任务06——封装与单元测试(Markdown版)

    模块代码地址 Core 模块代码地址 单元测试代码地址 两个地址是一样的,为了方便,所以把测试的代码很模块代码放在一起git了. 封装阶段 public class Core { public sta ...

  10. 分界线<hr/>

    <hr align="center" noshade="noshade" width="90px" color="#1DAB ...