`
uule
  • 浏览: 6357911 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

Thread例子

 
阅读更多

看看对Thread到底懂多少,嘿嘿

 

 Example1:

public class Bground extends Thread{
    public static void main(String argv[])
    {
        Bground b = new Bground();
        b.run();
    }
    public void start()
    {
       for (int i = 0; i <10; i++){
           System.out.println("Value of i = " + i);
       }
    }
}

 结果:

编译无错,但不打印任何值。调用run不创建线程

 

Example2:

 

public class Bground extends Thread{
    public static void main(String argv[])
    {
        //Bground b = new Bground();
    	Thread b = new Thread(new MyRunnable());
        b.run();
    }
    
    public void start()
    {
       for (int i = 0; i <10; i++){
           System.out.println("Value of i = " + i);
       }
    }
}

	class MyRunnable implements Runnable{

		@Override
		public void run() {
			for (int i = 0; i <10; i++){
		           System.out.println("Value of i = " + i);
		       }
		}
		
	}

 结果:

Value of i = 0

Value of i = 1

Value of i = 2

Value of i = 3

Value of i = 4

Value of i = 5

Value of i = 6

Value of i = 7

Value of i = 8

 

Value of i = 9

 

不是说线程是调用start()方法执行的么,怎么调用run()方法也执行了呢??

查看API发现:

 

/**
     * Causes this thread to begin execution; the Java Virtual Machine 
     * calls the <code>run</code> method of this thread. 
     */
    public synchronized void start() {..}


/**
     * If this thread was constructed using a separate 
     * <code>Runnable</code> run object, then that 
     * <code>Runnable</code> object's <code>run</code> method is called; 
     * otherwise, this method does nothing and returns. 
     */
    public void run() {
	if (target != null) {
	    target.run();
	}
    }

 

调用线程类的run()方法时,如果该线程是实现的Runnable接口,那么调用run()时就会执行该Runnable,否则无反应

原来如此!

 

Example3:

 

public class Bground extends Thread{
    public static void main(String argv[])
    {
        Bground b = new Bground();    	
        b.start();
    }
    
    public void start()
    {
       for (int i = 0; i <10; i++){
           System.out.println("Value of i = " + i);
       }
    }
}

 

结果:

Value of i = 0

Value of i = 1

Value of i = 2

Value of i = 3

Value of i = 4

Value of i = 5

Value of i = 6

Value of i = 7

Value of i = 8

 

Value of i = 9

 

我可以重载start()方法么?
因为Thread类的start()方法并不是final方法,因此可以,但不推荐这样做。因为在start()方法里创建一个新的线程,进行特定的操作。你可以传递一个实现了Runnable接口的类到Thread,或者继承Thread类,重载run()方法。

 

此处启动线程时会调用线程的run()方法(此处为空),但本身的start()方法也被当作普通方法执行。

 

注意继承了Thread的线程类,里面的实现方法也是run()方法,跟Runnable接口的一样。

 

public class MyThread extends Thread {  
  
    public void run() {  
        for (int i = 0; i < 100; i++) {  
            ...
        }  
    }  
  
    public static void main(String[] args) {  
        new MyThread().start();  
    }  
}  

  

Example4:

public class Bground extends Thread {
	public static void main(String argv[]) {
		Bground b = new Bground();

		b.start();
		System.out.println(b.isAlive());
		//System.out.println(Thread.currentThread().getThreadGroup().getName());
	}

	public void start() {
		//System.out.println(Thread.currentThread().getThreadGroup().getName());
		for (int i = 0; i < 10; i++) {
			System.out.println("Value of i = " + i);
		}
	}

	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println("Run : Value of i = " + i);
		}
	}
}

 又有run()方法,又有start()方法,结果多少??

结果:

Value of i = 0

Value of i = 1

Value of i = 2

Value of i = 3

Value of i = 4

Value of i = 5

Value of i = 6

Value of i = 7

Value of i = 8

Value of i = 9

 

false

 

说明什么??

说明此时线程根本没有执行,像一个普通类一样仅调用了start()方法。

 

那么去掉start()方法呢?

结果:

true

Run : Value of i = 0

Run : Value of i = 1

Run : Value of i = 2

Run : Value of i = 3

Run : Value of i = 4

Run : Value of i = 5

Run : Value of i = 6

Run : Value of i = 7

Run : Value of i = 8

 

Run : Value of i = 9

 

此时线程才真正执行了!

 

Example5: 

 

public class Test extends Thread {
    private String sThreadName;
     
    Test() { }
 
    Test(String s) {
        sThreadName = s;
    }
 
    public String getThreadName() {
        return sThreadName;
    }
 
    public void go() {
        Test first = new Test("first");
        first.start();
        Test second = new Test("second");
        second.start();
    }
    
    public static void main(String argv[]) {
        Test h = new Test();
        h.go();
    }
 
 
    public void start() {
        for (int i = 0; i < 2; i++) {
            System.out.println(getThreadName() + i);
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                System.out.println(e.getMessage());
            }
        }
    }
}
 

 

 结果你以为是:输出first0, second0, first1, second1.(1)

哈哈,错了!!!

结果为:

 first0

first1

second0

second1

 

如果要实现(1)的效果的话应该重载run,而不是start,此处仅相当于执行了start()方法。

 

 Example6:

public class Test {
    public static void main(String argv[]) {
        Pmcraven pm1 = new Pmcraven("one");
        pm1.run();
        Pmcraven pm2 = new Pmcraven("two");
        pm2.run();
    }
}
 
class Pmcraven extends Thread {
    private String sTname = "";
 
    Pmcraven(String s) {
        sTname = s;
    }
 
    public void run() {
        for (int i = 0; i < 2; i++) {
            try {
                sleep(1000);
            } catch (InterruptedException e) {
            }
            yield();
            System.out.println(sTname);
        }
    }
}

 

结果:

one

one

two

two

 

注意sleep(1000)方法依然起作用,结果是1秒显示一个。

 

 

 

分享到:
评论

相关推荐

    商业编程-源码-Csharp实例78 Thread例子1.zip

    本实例"商业编程-源码-Csharp实例78 Thread例子1"将深入探讨如何使用C#进行多线程编程,以及线程在实际商业应用中的作用和注意事项。 首先,让我们了解线程的基本概念。在计算机系统中,进程是资源分配的最小单位,...

    商业编程-源码-Csharp实例82 Thread例子3.zip

    本实例“商业编程-源码-Csharp实例82 Thread例子3.zip”就是对C#线程(Thread)的深入探讨,通过实际代码来演示其工作原理和用法。 C#中的`System.Threading.Thread`类是创建和管理线程的基础,它提供了创建新线程...

    商业编程-源码-Csharp实例81 Thread例子2.zip

    本示例"商业编程-源码-Csharp实例81 Thread例子2"着重于如何理解和应用C#中的线程技术,这对于开发多任务并行运行的应用程序至关重要。线程允许程序在执行过程中同时进行多个不同的操作,极大地提高了效率,尤其是在...

    线程经典例子 Thread

    一个线程经典例子 Thread delegate void SetProgressBarValueDele(); void SetProgressBarValue() { if (this.progressBar1.InvokeRequired) { this.Invoke(new SetProgressBarValueDele...

    threadsample官方例子

    threadsample官方例子是一个宝贵的教育资源,它可以帮助开发者系统地学习和实践多线程编程,理解线程的创建、管理、同步、通信以及并发问题的解决方案。通过深入研究这些示例,开发者可以提升自己的并发编程能力,更...

    Thread Factory 4(中文帮助文档).zip_ThreadFactory_VB多线程各种例子_factory_ste

    VB多线程各种例子Thread Factory 4(中文帮助文档)

    CH579M-RT-THREAD点灯例子

    在"CH579M-RT-THREAD点灯例子"中,我们主要关注的是如何利用RT-THREAD的API函数来控制CH579M的GPIO端口进行LED灯的开关操作。首先,我们需要配置GPIO端口作为输出模式,这通常涉及到设置端口方向寄存器。在RT-THREAD...

    android developer官网例子threadSample.zip

    android developer-&gt;training-&gt;sending operations to multiple threads 的例子。demo的例子叫threadSample.zip。这个例子请结合官网文档看,对android多线程处理给出了一个解决方案,写的相当好。

    C#例子代码 A0303_ThreadSafe

    C#例子代码 A0303_ThreadSafeC#例子代码 A0303_ThreadSafeC#例子代码 A0303_ThreadSafeC#例子代码 A0303_ThreadSafeC#例子代码 A0303_ThreadSafeC#例子代码 A0303_ThreadSafeC#例子代码 A0303_ThreadSafeC#例子代码 ...

    threadx 2002版本VS2013 带所有测试例子

    这些例子可能涵盖了基本任务创建、同步机制的使用、消息传递、定时器操作等各种功能,通过实际运行和分析这些测试案例,开发者能够深入学习ThreadX的内部工作方式,以及如何有效地利用其功能来设计高效的嵌入式系统...

    C#例子代码 A0300_Thread

    C#例子代码 A0300_ThreadC#例子代码 A0300_ThreadC#例子代码 A0300_ThreadC#例子代码 A0300_ThreadC#例子代码 A0300_ThreadC#例子代码 A0300_ThreadC#例子代码 A0300_ThreadC#例子代码 A0300_ThreadC#例子代码 A0300...

    vc6多线程例子程序,ThreadSample

    本教程将通过“vc6多线程例子程序,ThreadSample”来深入理解这一概念。 VC6是Visual C++ 6.0的简称,是一款由微软公司开发的老版C++集成开发环境。尽管它已经过时,但对于初学者来说,它仍然是学习Windows API和多...

    C#例子代码 A0301_ThreadAbort

    C#例子代码 A0301_ThreadAbortC#例子代码 A0301_ThreadAbortC#例子代码 A0301_ThreadAbortC#例子代码 A0301_ThreadAbortC#例子代码 A0301_ThreadAbortC#例子代码 A0301_ThreadAbortC#例子代码 A0301_ThreadAbortC#...

    RT thread在STM32F429实现finish shell功能

    RT Thread 是一个开源、实时性优秀的嵌入式操作系统,它为物联网设备提供了高效、轻量级的多任务调度和丰富的中间件服务。在STM32F429这样的微控制器上,RT Thread 可以充分利用其强大的处理能力,提供丰富的功能,...

    RTThread Stm32 标准库参考工程.zip_RT-Thread STD库_rtos stm32_rtthread_rt

    10. **应用示例**:通过具体的例子,如LED闪烁、串口通信、温湿度传感器读取等,了解如何将理论知识应用到实际项目中。 这个压缩包中的文件应包含了源代码、工程配置文件、Makefile、README文档等,通过阅读和分析...

    java多线程例子

    在第一个例子中,我们将继承 Thread 类来创建一个多线程类 TestThread。 ```java public class ThreadDemo { public static void main(String[] args) { new TestThread().start(); while(true) { System.out....

    python线程锁(thread)学习示例

    复制代码 代码如下:# encoding: UTF-8import threadimport time# 一个用于在线程中执行的函数def func(): for i in range(5): print ‘func’ time.sleep(1) # 结束当前线程 # 这个方法与thread.exit_thread()...

    java多线程thread实例

    `Thread`类是Java中的核心类,它允许我们创建并控制独立的执行线程。在这个实例中,我们将深入探讨如何使用`Thread`类创建和管理多线程。 1. **线程的基本概念** - **线程**:线程是程序执行的最小单元,一个进程...

    rtthread_simulator_v0.1.0.7z

    5. **applications**目录:应用程序目录存放了示例代码或者用户开发的应用,用户可以通过查看和运行这些例子来学习如何在RT-Thread上编写应用程序。 6. **kernel-sample-0.1.0**:这个可能是内核样本代码,用户可以...

    三个C#线程的例子三个C#线程的例子三个C#线程的例子

    ### 例子1:后台线程(Background Thread) 在C#中,可以通过`System.Threading.Thread`类创建一个新的线程。以下是一个简单的后台线程示例: ```csharp using System; using System.Threading; class Program { ...

Global site tag (gtag.js) - Google Analytics