java创建多线程的三种方式
/***************************继承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创建多线程的三种方式的更多相关文章
- Java并发编程:Java创建线程的三种方式
目录 引言 创建线程的三种方式 一.继承Thread类 二.实现Runnable接口 三.使用Callable和Future创建线程 三种方式的对比 引言 在日常开发工作中,多线程开发可以说是必备技能 ...
- java创建线程的三种方式及其对比
第一种方法:继承Thread类,重写run()方法,run()方法代表线程要执行的任务.第二种方法:实现Runnable接口,重写run()方法,run()方法代表线程要执行的任务.第三种方法:实现c ...
- AJPFX总结java创建线程的三种方式及其对比
Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行 ...
- java创建线程的三种方式及其对照
Java中创建线程主要有三种方式: 一.继承Thread类创建线程类 (1)定义Thread类的子类.并重写该类的run方法,该run方法的方法体就代表了线程要完毕的任务.因此把run()方法称为运行 ...
- Java创建多线程的三种方法
Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没 ...
- Java实现多线程的三种方式
Java多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.前两种方式启动的线程没有返回值 ...
- Java创建线程的三种方式
一.继承Thread类创建线程类 (1)定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务.因此把run()方法称为执行体. (2)创建Thread子类的实 ...
- [JAVA]JAVA实现多线程的三种方式
1.继承Thread类,通过start()方法调用 public class MultiThreadByExtends extends Thread { @Override public void r ...
- Java 实现多线程的三种方式
import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class Main { pu ...
随机推荐
- Sass mixin 使用css border属性画三角形
To be finished. //triangle@mixin css-triangle ($direction: "down", $size: 20px, $color: #0 ...
- 阻塞(sleep等等)区别 中断(interrupt)+ 中断的意义
不客气地说,至少有一半人认为,线程的"中断"就是让线程停止.如果你也这么认为,那你对多线程编程还没有入门. 在java中,线程的中断(interrupt)只是改变了线程的中断状态, ...
- jQuery实现局部刷新页面数据绑定
今天遇到了一个问题:怎么样才能做到只刷新页面中的Repeater控件中的数据,在不用UploadPannel的情况下? 试了好多方法,无意间在看jquery文件时发现,使用load()方法即可解决此问 ...
- discuz X3 门户定制
为了实现门户的定制,在本机全新的安装了discuzX3,现在只想使用其门户功能(即文章CMS管理).但是论坛功能是不能关闭的可能论坛是discuz的核心功能吧. 全新安装的discuzx3,主导航上只 ...
- 高并发服务器建议调小 TCP 协议的 time_wait 超时时间
说明:操作系统默认 240 秒后,才会关闭处于 time_wait 状态的连接,在高并发访问下,服 务器端会因为处于 time_wait 的连接数太多,可能无法建立新的连接,所以需要在服务器上 调小此 ...
- [HEOI2014]南园满地堆轻絮
[HEOI2014]南园满地堆轻絮 BZOJ luogu 二分答案贪心check 首先b[1]最小一定优 之后就贪心的最小化b[i]就行 #include<bits/stdc++.h> u ...
- Django模型中OneToOneField和ForeignKey的区别
网上看到一篇讲解"Django模型中OneToOneField和ForeignKey区别" 的文章,浅显易懂; 可以把ForeignKey形象的类比为: ForeignKey是on ...
- Linux中的日志功能
配置文件 /etc/logrotate.conf daily 日志的轮替周期是每天weekly 日志的轮替周期是每周monthly 日志的轮替周期是每月rotate 数字 保留的日志文件的个数comp ...
- [转载]mvc:view-controller
1.重定向 ? 1 <mvc:view-controller path="/" view-name="redirect:/admin/index"/> ...
- JavaScript setInterval()執行clearInterval() 再恢復setInterval()
clearInterval() 方法可取消由 setInterval() 设置的 timeout. clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值. ...