java之线程(二)创建和启动

线程的创建有三种方法:一是继承Thread类创建线程,二是实现Runnable接口,三是使用Callable和Future创建线程。

继承Thread类创建线程

  步骤:

  • 定义Thread子类,并重写该类的run方法,run方法代表将要完成的任务,也就是线程执行体
  • 创建Thread实例
  • 调用Thread子类的start()方法启动线程
 1 public class ThreadTest extends Thread{
 2
 3     private int i;
 4
 5     public void run(){
 6
 7         for( ;i < 100 ; i++ ) {
 8             //getName()返回当前线程的名字
 9             System.out.println(getName() + " " + i) ;
10         }
11
12     }
13
14
15     public static void main(String[] args) {
16
17         for(int i = 0; i < 100; i++){
18             //获取当前线程
19             System.out.println(Thread.currentThread().getName()
20                     +" " +i);
21             if(i == 20){
22                 new ThreadTest().start();
23                 new ThreadTest().start();
24             }
25         }
26     }
27
28 }

实现Runnable接口创建线程

步骤:

  • 定义Runnable实现类,并重写该类烦人run方法,该run方法同样是线程执行体》
  • 创建Runnable子类的实例,并以此作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象

  

 1 public class ThreadTest implements Runnable{
 2
 3     private int i;
 4
 5     public void run(){
 6
 7         for( ;i < 100 ; i++ ) {
 8             //当线程实现类用Runnable时,如果要获取当前线程
 9             //只能用Thread.currentThread()
10             System.out.println(Thread.currentThread().getName()
11                     +" " +i);
12         }
13
14     }
15
16
17     public static void main(String[] args) {
18
19         for(int i = 0; i < 100; i++){
20             //获取当前线程
21             System.out.println(Thread.currentThread().getName()
22                     +" " +i);
23             if(i == 20){
24                 ThreadTest st=    new ThreadTest();
25                 //通过new thread(target ,name)创建真正的线程对象
26                 new Thread(st, "线程1").start();
27                 new Thread(st, "线程2").start();
28             }
29         }
30     }
31
32 }

使用callable和Future创建线程

查看 http://blog.csdn.net/ghsau/article/details/7451464

创建线程的三种方式对比

采用实现Runnable、Callable接口的方式创见多线程时,优势是:

线程类只是实现了Runnable接口或Callable接口,还可以继承其他类。

在这种方式下,多个线程可以共享同一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。

劣势是:

编程稍微复杂,如果要访问当前线程,则必须使用Thread.currentThread()方法。

使用继承Thread类的方式创建多线程时优势是:

编写简单,如果需要访问当前线程,则无需使用Thread.currentThread()方法,直接使用this即可获得当前线程。

劣势是:

线程类已经继承了Thread类,所以不能再继承其他父类。

时间: 2024-08-04 21:24:21

java之线程(二)创建和启动的相关文章

Java线程:创建与启动

Java线程:创建与启动 一.定义线程 1.扩展java.lang.Thread类. 此类中有个run()方法,应该注意其用法: public void run() 如果该线程是使用独立的 Runnable 运行对象构造的,则调用该 Runnable 对象的 run 方法:否则,该方法不执行任何操作并返回.   Thread 的子类应该重写该方法. 2.实现java.lang.Runnable接口. void run() 使用实现接口 Runnable 的对象创建一个线程时,启动该线程将导致在独

Java语言基础-多线程-①线程的创建和启动

简单阐释进程和线程 对于进程最直观的感受应该就是“windows任务管理器”中的进程管理: (计算机原理课上的记忆已经快要模糊了,简单理解一下):一个进程就是一个“执行中的程序”,是程序在计算机上的一次运行活动.程序要运行,系统就在内存中为该程序分配一块独立的内存空间,载入程序代码和资源进行执行.程序运行期间该内存空间不能被其他进程直接访问.系统以进程为基本单位进行系统资源的调度和分配.何为线程?线程是进程内一次具体的执行任务.程序的执行具体是通过线程来完成的,所以一个进程中至少有一个线程.回忆

03_线程的创建和启动_实现Runnable接口方式

[线程的创建和启动的步骤(实现Runnable接口方式)] 1.定义Runnable接口的实现类,并重写其中的run方法.run()方法的方法体是线程执行体.class SonThread  implement Runnable{ public void run(){......}} 2.创建Runnable接口实现类的实例.   sonThread s1=new SonThread(); 3.用该实例作为Thread的target来创建Thread对象.   Thread t1 =new Th

多线程--线程的创建与启动

创建一个线程,Java提供三种方法 (1)通过实现Runnable接口,重写run方法 (2)通过继承Thread类本身,--必须重写 (3)通过Callable和Future创建线程 Thread类的方法 void start()使该线程开始执行,Java虚拟机调用该线程的run方法. final void setName(String name)改变线程名称,使之与参数name相同 setPriority(int priority)更改线程的优先级 join(long millisec)等待

02_线程的创建和启动_继承Thread方式

[简述] java使用Thread类代表线程,所有的线程都必须是Thread或者其子类的实例. 每个线程的任务就是完成一定的任务,实际上就是执行一段程序流. [创建并启动多线程的步骤(集成Thread类方式)] 1.定义继承Thread类的子类,重写run方法:run()方法就代表了线程需要完成的任务,故run()方法称为:线程执行体. 2.创建线程对象:即创建Thread子类的实例. 3.启动线程:调用线程对象的start()方法来. [示例代码FirstThread.java] packag

java多线程编程(二创建线程)

1.概念           因为java是完全面向对象的,所以在java中,我们说的线程,就是Thread类的一个实例对象.所以,一个线程就是一个对象,它有自己字段和方法. 2.创建线程 创建线程有2种方法:1.扩展线程父类Thread类 , 2.实现Runnable接口.2种方法是由区别的. 提示:Thread类已经实现了Runnable接口,Thread类中不但实现了run方法,也定义了更多的,全面的线程对象的操作方法,而Runnable接口中只有run这一个方法. 通过扩展Thread类

第二十七节(多线程、线程的创建和启动、生命周期、调度、控制、同步)

线程指进程中的一个执行场景,也就是执行流程,那么进程和线程的区别是什么 1. 每个进程是一个应用程序,都有独立的内存空间 2. 同一个进程中的线程共享其进程中的内存和资源 (共享的内存是堆内存和方法区内存,栈内存不共享,每个线程有自己的) 什么是进程? 一个进程对应一个应用程序. 例如:在 windows 操作系统启动 Word 就表示启动了一个进程.在 java 的开发环境下启动 JVM, 就表示启动了一个进程.现代的计算机都是支持多进程的,在同一个操作系统中,可以同时启动多个进程. /* 分

01_线程的创建和启动

1.线程的使用步骤 2.第一种定义线程类的方法:继承java.lang.Thread类 MyThread 文件: public class MyThread extends Thread { private int count=0; @Override public void run() { System.out.println("线程已启动"); while(count<10000) { count++; } System.out.println("count:&qu

java中线程池创建的几种方式

java中创建线程池的方式一般有两种: 通过Executors工厂方法创建 通过new ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue)自定义创建 Executors工厂方法创建 package com.javaBase.LineDistancePond; import java.util.

Java总结(九)——(线程模块 一(线程的创建(方法一)与启动,线程状态与生命周期,进程与线程))

一.进程与线程 进程:每一个独立运行的程序称为一个进程 线程:线程时一个进程内部的一条执行路径,Java虚拟机允许程序并发的运行多个执行路径 *进程中执行运算的最小单位-->线程<--处理机分配 进程与线程的区别: (1)进程有独立的运行地址空间,一个进程崩溃后不会影响到其他的进程,而线程只是 一个进程中的一个执行路径,如果有一条线程奔溃了,可能会影响到进程中的的其他线程 (2)线程有自己的栈和局部变量,多个线程共享同一进程的地址空间 (3)一个进程至少有一个线程 多线程 (1)多线程 就是在