线程的创建

创建一个Java线程常见的有两种方式:

1.继承Thread类
两种表示方法:
(1).外部类

import java.util.Date;

public class Test1 {
    public static void main(String[] args) {

        //启动新线程 来完成输出时间的操作

        Mytime mt=new Mytime();
        //启动新线程 Thread的start()
        mt.start();

        for (int i = 0; i < 100; i++) {

                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {

                    e.printStackTrace();
                }
            System.out.println("主线程::"+i);
        }

    }

}
//外部类的解决方案
class Mytime extends Thread{

    @Override
    public void run() {
        // 放入线程要执行的代码 这是一个非常耗时的操作
        boolean flag=true;
        while(flag){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }

            Date d=new Date();
            System.out.println(d);
        }

    }
}

(2).匿名内部类

import java.util.Date;

public class Test2 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        //匿名内部类的解决方案
        Thread t=new Thread(){
            @Override
            public void run() {
                boolean flag=true;
                while(flag){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {

                        e.printStackTrace();
                    }

                    Date d=new Date();
                    System.out.println(d);
                }
            }

        };

        t.start();

        for (int i = 0; i < 100; i++) {

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }
        System.out.println("主线程::"+i);
    }

    }

}

------------------------------------------------------

import java.util.Date;

public class Test3 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        //匿名内部类 方案  因为这时   子类名是没有的 直接对Thread的run方法进行了实现
        new Thread(){
            @Override
            public void run() {
                boolean flag=true;
                while(flag){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {

                        e.printStackTrace();
                    }

                    Date d=new Date();
                    System.out.println(d);
                }
            }

        }.start();

        for (int i = 0; i < 100; i++) {

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }
        System.out.println("主线程::"+i);
        }

    }

}


2.实现Runnable接口
两种表示方法
(1).外部类

import java.util.Date;

public class Test4 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Mytime2 mt=new Mytime2();
        // 创建线程用Thread类 并指定这个线程要执行的任务是mt
        Thread t=new Thread(mt);
        t.start();

        for (int i = 0; i < 100; i++) {

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }
        System.out.println("主线程::"+i);
    }

    }

}

//外部类  这表示一个线程可以执行的任务
 class Mytime2 implements Runnable{

    @Override
    public void run() {
        boolean flag=true;
        while(flag){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }

            Date d=new Date();
            System.out.println(d);
        }

    }

 }

(2).匿名内部类

import java.util.Date;

public class Test5 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // 创建一个任务对象 匿名内部类 有对象的引用

        Runnable r=new Runnable(){
            @Override
            public void run() {
                boolean flag=true;
                while(flag){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {

                        e.printStackTrace();
                    }

                    Date d=new Date();
                    System.out.println(d);
                }

            }

        };

        Thread t=new Thread(r);
        t.start();

        for (int i = 0; i < 100; i++) {

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }
        System.out.println("主线程::"+i);
        }

    }

}

----------------------------------------------------------------------------

import java.util.Date;

public class Test6 {

    /**
     * @param args
     */
    public static void main(String[] args) {

        // 创建一个任务对象 匿名内部类
        new Thread(new Runnable(){

            @Override
            public void run() {
                boolean flag=true;
                while(flag){
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {

                        e.printStackTrace();
                    }

                    Date d=new Date();
                    System.out.println(d);
                }

            }

        }).start();

        for (int i = 0; i < 100; i++) {

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {

                e.printStackTrace();
            }
        System.out.println("主线程::"+i);
        }

    }

}
时间: 2024-10-27 11:44:07

线程的创建的相关文章

线程管理(一)线程的创建和运行

线程的创建和运行 在这个指南中,我们将学习如何在Java程序中创建和运行线程.与每个Java语言中的元素一样,线程是对象.在Java中,我们有2个方式创建线程: 通过直接继承thread类,然后覆盖run()方法. 构建一个实现Runnable接口的类, 然后创建一个thread类对象并传递Runnable对象作为构造参数 在这个指南中,我们将使用第二种方法来制作一个简单的程序,它能创建和运行10个线程.每一个线程能计算和输出1-10以内的乘法表. 准备 指南中的例子是使用Eclipse IDE

新手学JAVA(十)-多线程----线程的创建和启动

Java使用Thread类代表线程,所有的线程对象都必须是Thread类或者其子类的实例.每个下次你哼的作用是完成一定的任务,实际上就是执行一段程序流(一段顺序执行的代码).Java使用线程执行体来代表这段程序流     在Java线程的创建有三种方式      通过继承Thread类创建线程类 步骤如下 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务.因此把run()方法称为线程执行体. 创建Thread子类的实例,即创建了线程的对象.

线程管理:守护线程的创建和运行

线程管理:守护线程的创建和运行 守护线程的创建和运行Java有一种特别的线程叫做守护线程.这种线程的优先级非常低,通常在程序里没有其他线程运行时才会执行它.当守护线程是程序里唯一在运行的线程时,JVM会结束守护线程并终止程序. 根据这些特点,守护线程通常用于在同一程序里给普通线程(也叫使用者线程)提供服务.它们通常无限循环的等待服务请求或执行线程任务.它们不能做重要的任务,因为我们不知道什么时候会被分配到CPU时间片,并且只要没有其他线程在运行,它们可能随时被终止.JAVA中最典型的这种类型代表

java线程技术——线程的创建运行终止

http://blog.chinaunix.net/uid-122937-id-192835.html 1.创建和运行线程在Java中,多线程的实现有两种方式:      扩展java.lang.Thread类      实现java.lang.Runnable接口 (1)扩展Thread类      Thread Test = new Thread();      Test.start(); (2)实现Runnable接口将实现Runnable接口的类实例化            Test i

handler-Android。在无限循环的线程中创建Message对象,无限出现GC调用。

问题描述 Android.在无限循环的线程中创建Message对象,无限出现GC调用. 我在Android开发中.开启了一个线程,这个线程是无限循环的.并且在这个线程里,我通过创建Handle的Message对象,然后handler.sendMessage(msg).可是这样一来,LOGCat上就一直出现GC_CONCURRENT.请问我该怎么修改代码,或者用哪种方式才能即实现功能,又能减少GC的调用.具体代码如下://线程private class getData_thread extends

background-无法在线程中创建handler

问题描述 无法在线程中创建handler 错误: logUser("An error happend while creating graph:"+ getErrorMessage()); getErrorMessage()无法在线程中创建handler,线程没有调用Looper.prepare(),而logUser 是用来显示toast信息的函数. void prepareGraph() { logUser("loading graph (" + Helper.V

线程管理(七)守护线程的创建和运行

守护线程的创建和运行 Java有一种特别的线程叫做守护线程.这种线程的优先级非常低,通常在程序里没有其他线程运行时才会执行它.当守护线程是程序里唯一在运行的线程时,JVM会结束守护线程并终止程序. 根据这些特点,守护线程通常用于在同一程序里给普通线程(也叫使用者线程)提供服务.它们通常无限循环的等待服务请求或执行线程任务.它们不能做重要的任务,因为我们不知道什么时候会被分配到CPU时间片,并且只要没有其他线程在运行,它们可能随时被终止.JAVA中最典型的这种类型代表就是垃圾回收器. 在这个指南中

线程管理(十二)用线程工厂创建线程

用线程工厂创建线程 在面向对象编程的世界中,工厂模式是最有用的设计模式.它是一个创造模式,还有它的目的是创建一个或几个类的对象的对象.然后,当我们想创建这些类的对象时,我们使用工厂来代替new操作. 有了这个工厂,我们有这些优势来集中创建对象们: 更简单的改变了类的对象创建或者说创建这些对象的方式. 更简单的为了限制的资源限制了对象的创建. 例如, 我们只new一个此类型的对象. 更简单的生成创建对象的统计数据. Java提供一个接口, ThreadFactory 接口实现一个线程对象工厂. 并

关于线程内创建socket create函数返回空的情况。。。。

问题描述 关于线程内创建socket create函数返回空的情况.... 解决方案 你只是new了一个CSocket,m_hSocket有值了,但是没有看到你代码里有create的调用,create创建的代码写在哪里?

Android App在线程中创建handler的方法讲解_Android

相关概念1.Handler:可以看做是一个工具类,用来向消息队列中插入消息的; 2.Thread:所有与Handler相关的功能都是与Thread密不可分的,Handler会与创建时所在的线程绑定; 3.Message:消息; 4.MessageQueue:消息队列,对消息进行管理,实现了一个Message链表; 5.Looper:消息循环,从MessageQueue中取出Message进行处理: 6.HandlerThread:继承Thread,实例化时自动创建Looper对象,实现一个消息循