1. 直接使用Thread来创建

package com.test.tt;

public class ThreadEx extends Thread{
private int j; public void run(){
for(j=0; j<100;j++){
System.out.println("当前的线程名称是:"+ getName() + " " + "当前j的值是:" + j);
}
} public static void main(String[] args) {
for(int h=0; h<100;h++){ if(h==20){
//这里新建了两个Thread对象
ThreadEx threadTest1= new ThreadEx();
ThreadEx threadTest2= new ThreadEx();
threadTest1.start();
threadTest2.start();
} System.out.println("当前的线程名称是:"+ Thread.currentThread().getName() + " " + "当前h的值是:" + h); } } }

2. 通过实现Runnable接口,并将Runnable实现对象作为Thread的Target的方式创建

注:区别于第一种方法,这里可以达到两个线程共享变量i的目的。

package com.test.tt;

public class RunnableEx implements Runnable{

    private int i;
@Override
public void run() {
for(i=0; i<100;i++){
System.out.println("当前的线程名称是:"+ Thread.currentThread().getName() + " " + "当前i的值是:" + i);
} } public static void main(String[] args) {
for(int j=0;j<100;j++){
System.out.println("当前的线程名称是:"+ Thread.currentThread().getName() + " " + "当前j的值是:" + j);
if(j==20){
RunnableEx REx=new RunnableEx();
//这里也新建了两个Thread对象,但是里面的Target是同一个Runnable实现类对象
Thread thread1 = new Thread(REx, "实例1");
Thread thread2 = new Thread(REx, "实例2");
thread1.start();
thread2.start();
}
} } }

3. 通过实现Callable接口的方式创建(这是一个具有返回值的创建方式)

注:FutureTask只能启动一个线程

package com.test.tt;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask; public class CallableEx implements Callable{
@Override
public Object call() throws Exception {
int i =0;
for(;i<1000;i++){
System.out.println("当前的线程名称是:"+ Thread.currentThread().getName() + " " + "当前i的值是:" + i);
}
return i;
} public static void main(String[] args) {
// TODO Auto-generated method stub CallableEx CEx = new CallableEx();
FutureTask<Integer> task = new FutureTask<Integer>(CEx); for(int j=0;j<1000;j++){
System.out.println("当前的线程名称是:"+ Thread.currentThread().getName() + " " + "当前i的值是:" + j);
if(j==200){
Thread thread1 = new Thread(task, "实例1");
thread1.start();
}
} try{
//这里的get()方法可以获取到子线程的返回值,而且在执行时会中断main线程
System.out.println("线程的返回值:" + task.get());
}catch(Exception ex){
ex.printStackTrace();
}
} }

Java的多线程创建方法的更多相关文章

  1. 2017第45周一java多线程创建方法

    1. 从JDK1.5开始,Java提供了3种方式来创建,启动多线程: Ø 继承Thread类来创建线程类,重写run()方法作为线程执行体. Ø 实现Runnable接口来创建线程类,重写run()方 ...

  2. Java之多线程创建方式

    多线程的由来 我们在之前,学习的程序在没有跳转语句的前提下,都是由上至下依次执行,那现在想要设计一个程序,边打游戏边听歌,怎么设计?要解决上述问题,咱们得使用多进程或者多线程来解决. 多线程的好处: ...

  3. 【Java】多线程相关复习—— 线程的创建、名字、运行情况以及顺序控制(join方法) 【一】

    一.创建线程的三种方式 · 继承Thread类 · 实现Runnable接口 · 实现Callable接口 二. 线程状态 · 线程名字 getName() · 线程活动情况 isAlive() · ...

  4. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

  5. JAVA之多线程的创建

    转载请注明源出处:http://www.cnblogs.com/lighten/p/5967853.html 1.概念 老调重弹,学习线程的时候总会牵扯到进程的概念,会对二者做一个区分.网上有较多的解 ...

  6. java学习之创建线程方法二

    我们上一节当中讲到了创建线程的第一种方法,就是继承Thread类,覆写Thread当中的run方法,然后创建子类对象,之后调用对象的start方法启动线程.但是这种方法有一个缺陷,因为我们知道在jav ...

  7. java学习多线程之创建多线程一

    现在我们有这么一个需求,就是在主线程在运行的同时,我们想做其他的任务,这个时候我们就用到了多线程.那么如何创建多线程,我们知道在系统当中qq的多线程创建是由操作系统来完成的,那么如果我们想在java当 ...

  8. Java进阶(四十二)Java中多线程使用匿名内部类的方式进行创建3种方式

    Java中多线程使用匿名内部类的方式进行创建3种方式 package cn.edu.ujn.demo; // 匿名内部类的格式: public class ThreadDemo { public st ...

  9. Java多线程(四)java中的Sleep方法

    点我跳过黑哥的卑鄙广告行为,进入正文. Java多线程系列更新中~ 正式篇: Java多线程(一) 什么是线程 Java多线程(二)关于多线程的CPU密集型和IO密集型这件事 Java多线程(三)如何 ...

随机推荐

  1. linux 块设备驱动(五)——块设备应用层的操作

    一: 加载好sbull驱动 root@CarRadio:/# ls /dev/sbull -l brw-r--r-- 1 root root 254, 16 Mar 25 08:25 /dev/sbu ...

  2. 侧边打赏-html

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...

  3. javaScript中innerHTML,innerText,outerHTML,outerText的区别

    开头说下innerText和outerText只在chrome浏览器中有效 定义和用法 innerHTML 属性设置或返回表格行的开始和结束标签之间的 HTML,包括标签. 来看代码 <!DOC ...

  4. 搭建mysql主从集群的步骤

    前提条件是:须要在linux上安装4个mysql数据库,都须要配置完对应的信息. 须要搭建: mysql 01: 主数据库  master                  mysql 02 :   ...

  5. iOS开发 如何检查内存泄漏

    本文转载至 http://mobile.51cto.com/iphone-423391.htm 在开发的时候内存泄漏是不可避免的,但是也是我们需要尽量减少的,因为内存泄漏可能会很大程度的影响程序的稳定 ...

  6. Spring整合Hibernate的方法

    一.基本支持 Spring 支持大多数流行的 ORM 框架, 包括 Hibernate JDO, TopLink, Ibatis 和 JPA. Spring 对这些 ORM 框架的支持是一致的, 因此 ...

  7. Collection of Boot Sector Formats for ISO 9660 Images

    http://bazaar.launchpad.net/~libburnia-team/libisofs/scdbackup/view/head:/doc/boot_sectors.txt Colle ...

  8. Communicating sequential processes

    the-way-to-go_ZH_CN/01.2.md at master · Unknwon/the-way-to-go_ZH_CN https://github.com/Unknwon/the-w ...

  9. Redisson实现Redis分布式锁的N种姿势(转)

    Redis几种架构 Redis发展到现在,几种常见的部署架构有: 单机模式: 主从模式: 哨兵模式: 集群模式: 我们首先基于这些架构讲解Redisson普通分布式锁实现,需要注意的是,只有充分了解普 ...

  10. [SCOI2009] 最长距离

    题目描述 windy有一块矩形土地,被分为 NM 块 11 的小格子. 有的格子含有障碍物. 如果从格子A可以走到格子B,那么两个格子的距离就为两个格子中心的欧几里德距离. 如果从格子A不可以走到格子 ...