`

多线程的几个小程序,诠释多线程的基本概念

阅读更多
通过实现Runnable来实现多线程:
public class TestThread1{
	public static void main(String[] args){
		Runner1 r = new Runner1();
		Thread t = new Thread(r);
		t.start();
//注意:t.run(); 是指方法调用,先执行Runner1()后,再往下执行。
		for(int i=200; i<300; i++){
			System.out.println("main--" + i);
		}
	}
}

class Runner1 implements Runnable{
	public void run(){
		for(int i=0; i<100; i++){
			System.out.println("Runner1--" + i);
		}
	}
}


public class Test1 implements Runnable {

	@Override
	public void run() {
		for (int i = 0; i < 10; i++) {
			System.out.println("Thread: " + i );
			try {
				Thread.sleep((int)Math.random() * 200);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}  
		}
	}
	
	public static void main(String[] args) {
		Test1 t1 = new Test1();
		Thread t_1 = new Thread(t1);
		t_1.setName("aaa");
		t_1.start();
		for (int i = 0; i < 10; i++) {
			System.out.println("main: " + i );
			try {
				Thread.sleep((int)Math.random() * 200);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}  
		}
	}
}



通过继承Thread来实现多线程:
public class TestThread1{
	public static void main(String[] args){
		Runner1 r = new Runner1();
		r.start();
		for(int i=200; i<300; i++){
			System.out.println("main--" + i);
		}
	}
}

class Runner1 extends Thread{
	public void run(){
		for(int i=0; i<100; i++){
			System.out.println("Runner1--" + i);
		}
	}
}


注意:继承了Thread,那么不用再new Thread来起线程,直接用Runner1.start()即可

通过Thread.join()方法来等待当前线程走完
下面的程序,如果join了,那么n就等于1000

	public static volatile int n = 0;

	public void run() {
		for (int i = 0; i < 10; i++, n++)
			try {
				sleep(3); // 为了使运行结果更随机,延迟3毫秒
			} catch (Exception e) {
			}
	}

	public static void main(String[] args) throws Exception {
		Thread threads[] = new Thread[100];
		for (int i = 0; i < threads.length; i++)
			// 建立100个线程
			threads[i] = new Test4();
		for (int i = 0; i < threads.length; i++)
			// 运行刚才建立的100个线程
			threads[i].start();
		if (args.length > 0){
			for (int i = 0; i < threads.length; i++){
				// 100个线程都执行完后继续
				threads[i].join();
			}
		}
		System.out.println("n=" + Test4.n);
	}


在多线程中如何传递参数:
简单的是通过构造函数和set()来传值
复杂的是通过回调函数传值
下面的代码描述了回调传值的用法:
package com.mhm.test;

public class Test5 extends Thread {

	private Work work;

	
	public Test5(Work work) {
		this.work = work;
	}

	public void run() {
		java.util.Random random = new java.util.Random();
		Data data = new Data();
		int n1 = random.nextInt(1000);
		int n2 = random.nextInt(2000);
		int n3 = random.nextInt(3000);
		work.process(data, n1, n2, n3); // 使用回调函数
		System.out.println(String.valueOf(n1) + "+" + String.valueOf(n2) + "+" + String.valueOf(n3) + "=" + data.value);
	}
	
	public static void main(String[] args) {
		Thread t1 = new Test5(new Work());
		Thread t2 = new Test5(new Work());
		Thread t3 = new Test5(new Work());
		
		t1.start();
		t2.start();
		t3.start();
	}
}

class Data {
	public int value = 0;
}

class Work {
	public void process(Data data, Integer... numbers) {
		for (int n : numbers) {
			data.value += n;
		}
	}
}


这个程序可能会输出"NULL":
因为线程可能还没有赋值就已经syso了。
解决办法是在start()后面加个join();
package com.mhm.test;

public class Test6 extends Thread {
	private String value1;
    private String value2;

    public void run()
    {
        value1 = "通过成员变量返回数据";
        value2 = "通过成员方法返回数据";
    }
    public static void main(String[] args) throws Exception
    {
    	Test6 thread = new Test6();
        thread.start();
        System.out.println("value1:" + thread.value1);
        System.out.println("value2:" + thread.value2);
    }
}

分享到:
评论

相关推荐

    易语言多线程多次启动一个子程序

    通过理解多线程的基本概念,掌握易语言中的线程创建和管理方法,以及注意线程安全和同步,你可以编写出高效且稳定的多线程程序。在实际开发中,不断实践和优化,将是提升多线程编程能力的关键。

    关于多线程的一个小程序

    在多线程编程中,有以下几个关键概念: 1. 线程安全:当多个线程访问同一数据时,如果代码能保证数据的完整性和一致性,那么我们就说这个代码是线程安全的。为了实现线程安全,通常需要使用锁(如互斥量、信号量)或...

    多线程 小球 运行程序(eclipse工程可导入)

    标题中的“多线程 小球 运行程序(eclipse工程可导入)”表明这是一个与多线程编程相关的项目,可能是用Java语言实现的,因为Eclipse是Java开发的常用集成开发环境。这个程序可能设计了一个模拟小球运动的场景,通过多...

    C#线程相关几个小程序

    标题 "C#线程相关几个小程序" 涉及到的是C#编程语言中的多线程技术,这是软件开发中非常关键的一个部分,特别是在需要同时处理多个任务或提高程序响应速度时。C#提供了丰富的线程支持,让我们来详细探讨一下相关知识...

    一个多线程下载程序

    标题 "一个多线程下载程序" 描述了一个使用VC++编程语言实现的软件,该软件能够通过多线程技术加速文件的下载过程。多线程下载是现代互联网应用程序中常见的优化技术,尤其对于大文件下载,它能显著提高下载速度,...

    C++多线程 最简易的多线程程序

    这个简易的实现为初学者提供了一个很好的起点,让大家了解多线程的基本概念和用法。 首先,要使用C++的多线程功能,我们需要包含`&lt;thread&gt;`头文件,并链接`stdc++fs`库。C++11引入了`std::thread`类,用于创建和...

    POSIX多线程程序设计.pdf

    本书首先解释了线程的基本概念,包括异步编程、线程的生命周期和同步机制;然后讨论了一些高级话题,包括属性对象、线程私有数据和实时调度。此外,本书还讨论了调度的问题,并给出了避免错误和提高性能等问题的有...

    C++多线程网络聊天程序 .zip

    在聊天程序中,多线程的应用场景通常包括以下几个方面: 1. **接收线程**:这个线程负责从网络接收数据,例如,当用户在网络上的其他设备发送消息时,接收线程会持续监听网络连接,一旦接收到新数据,就将其解析并...

    多线程聊天程序多线程聊天程序多线程聊天程序

    1. **线程概念**:线程是操作系统分配CPU时间的基本单位,一个进程可以包含一个或多个线程。多线程意味着在一个程序中同时执行多个任务,可以显著提高CPU资源的利用率。 2. **线程同步与互斥**:在多线程环境中,...

    java多线程几个概念

    ### Java多线程几个核心概念 #### 一、理解多线程 多线程是一种让程序内部的不同任务或计算能够并发执行的技术。在Java中,多线程的应用极为广泛,可以大大提高程序的效率和响应性。多线程的核心概念包括以下几个...

    java多线程小汽车运行程序

    Java多线程是Java编程中的一个重要概念,它允许程序同时执行多个任务,提高了程序的效率和响应速度。在这个名为"java多线程小汽车运行程序"的项目中,我们可以看到一个利用Java实现的多线程应用程序,可能是模拟汽车...

    在C#中编写多线程应用程序

    多线程是现代软件开发中的一个重要概念,尤其是在像C#这样的高级编程语言中。它允许程序同时执行多个任务,从而提高了应用程序的性能和响应性。本文将详细介绍如何在C#中创建和管理线程,包括启动线程、终止线程、挂...

    C#.NET多线程实例6个(包括多线程基本使用,多线程互斥等全部多线程使用实例),可直接运行

    本资源包含六个C#.NET多线程的实例,涵盖了多线程的基本使用到更高级的概念,如线程互斥。以下是这些实例可能涉及的关键知识点: 1. **线程创建**:C#中创建线程主要有两种方式,一是通过`System.Threading.Thread`...

    一个多线程同步读写的小程序

    在这个“一个多线程同步读写的小程序”中,我们看到开发者尝试通过创建读线程和写线程来同时进行数据的读取和写入,以优化程序的执行流程。 首先,让我们深入理解多线程的概念。线程是操作系统分配处理器时间的基本...

    多线程端口通信小程序

    在IT领域,多线程和端口通信是两个重要的概念,尤其在开发高效能和实时性的应用程序时。本文将深入探讨这两个主题,并结合"多线程端口通信小程序"的描述,来理解如何利用多线程技术进行串行端口(如COM口)的数据...

    使用三种VC的多线程同步方法编写一个多线程的程序

    1.使用三种VC的多线程同步方法编写一个多线程的程序(要求在屏幕上先显示Hello,再显示World)。 1)基于全局变量的多线程同步程序; 2)基于事件的多线程同步程序; 3)基于临界区的多线程同步程序。

    POSIX多线程程序设计

    在深入探索 POSIX 多线程程序设计之前,我们需要了解POSIX(可移植操作系统接口)是一个定义一系列UNIX系统服务的接口标准,这些服务包括文件处理、进程控制、信号处理、定时器、多线程等,POSIX标准让编写的应用...

    深入浅出 Java 多线程.pdf

    Java 多线程编程是 Java 编程语言中一个非常重要的概念,它允许程序同时执行多个任务,以提高程序的执行效率和响应速度。在本文中,我们将深入浅出Java多线程编程的世界,探索多线程编程的基本概念、多线程编程的...

    C#多线程互斥实例 多线程获取同一变量

    在编程领域,多线程是实现并发执行任务的重要机制,特别是在现代计算机系统中,多核处理器使得多线程成为提高程序性能的关键手段。C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多...

    多线程_按键精灵经典多线程操作_

    在IT行业中,多线程是一种常见的编程技术,它允许程序同时执行多个独立的任务,从而提高计算机系统的效率和响应性。特别是在自动化工具如“按键精灵”中,多线程的应用能够显著提升其性能和实用性。 标题“多线程_...

Global site tag (gtag.js) - Google Analytics