java创建多线程的三种方式
2015-09-09 14:23
344 查看
/***************************继承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(); } } }
相关文章推荐
- 源码:从控制台接收数据
- eclipse 安装svn插件
- Eclipse:Cannot complete the install because of a conflicting dependency.问题解决
- java开源资源
- java游戏框架那点事(转)
- 源码:打印错误信息和调试信息
- EL&struts2标签 读取map,list集合
- java保留两位小数【转】
- JAVA 计算根据经纬度计算距离
- ti info找不到JAVA_HOME
- Eclipse 中 Ant 无日志输出
- Spring3.0 AOP 详解
- Spring中事务与aop的先后顺序问题
- 文章标题
- Spring配置文件xsi:schemaLocation无法解析导致启动失败的解决方案
- 更改Eclipse里的M2_REPO变量值
- new 出的对象,无法调用@Autowired进入的spring bean
- Java统计一段文字多少重复次数最多单词
- 欢迎使用CSDN-markdown编辑器
- 不用ubuntu,不用mac。教你在windows环境下轻轻松松将android platform源码链接到eclipse