`
中南大宝
  • 浏览: 34226 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

多线程学习总结

阅读更多

一、什么是线程?什么是进程?两者有何区别?

 

      每个Java程序都至少有一个线程——主线程。当一个Java程序启动时,JVM会创建主线程,并在该线程中调用程序的main()方法。线程可以理解为“程序内部的一个独立运行单位”。

      进程是操作系统环境中的基本成分,是系统资源分配的基本单位。进程在执行过程中有内存单元的初始入口点,并且进程存活过程中始终拥有独立的内存地址空间。

 

      两者的区别是:

      1.简单而言,一个应用程序就是一个进程,而线程是一个进程内部的多个运行单位。

      2.多个进程的内部数据和状态都是完全独立的,而多线程是共享一块内存空间和一组系统资源(在同一进程内)。线程仍是处理器调度的基本单位,但不再是资源分配单位。

      3.线程的状态切换比进程切换的负担要小。

 

二、如何实现多线程?

 

线程是指正在执行的一个指令序列。在Java语言中是指从一个线程对象的start()方法执行开始运行run()方法体中的那一段相对独立的过程。主要有两种实现的方式:

 

      1.继承Thread

 

public class ThreadTest extends Thread {
	/**
	 * 覆盖Thread类的run方法
	 */
	public void run() {
		System.out.println("测试线程启动");
	}
	public static void main(String a[]) {
		for (int i = 1; i < 4; i++) {
			ThreadTest test = new ThreadTest();//创建线程类ThreadTest对象
			test.start();//启动线程
			System.out.println("启动线程"+i);
		}
	}
}

执行结果是:

测试线程启动

启动线程1

启动线程2

测试线程启动

启动线程3

测试线程启动

 

 实现Runnable接口 

public class RunnableTest implements Runnable {
	/**
	 * 实现Runnable接口中的run方法
	 */
	public void run() {
		System.out.println("测试线程启动");
	}
	public static void main(String a[]) {
		for (int i = 1; i < 4; i++) {
			RunnableTest test = new RunnableTest();//创建线程类RunnableTest的对象
			Thread thread = new Thread(test);//创建线程类Thread对象
			thread.start();//启动线程
			System.out.println("启动线程"+i);
		}
	}
}

测试结果如下:

测试线程启动

启动线程1

启动线程2

测试线程启动

启动线程3

测试线程启动

 

三、请用代码说明匿名内部类和TimerTask实现线程的过程

 

1.匿名内部类实现多线程的demo

public class ThreadTest {
	//主函数入口
	public static void main(String[] args) {
		ThreadTest tt =new ThreadTest();
		for(int i=0;i<10;i++){
			tt.StartMyThread(i);
		}
	}
	/**
	 * 这个方法会启动一个匿名线程
	 * @param threadID
	 */
	public void StartMyThread(int threadID){
		//要传入匿名线程内使用的参数必须定义为final型
		final int id = threadID;
		//下边是匿名内部类实现多线程的过程
		java.lang.Runnable runner = new Runnable(){
			public void run(){
				int i =10;
				boolean flag = true;
				while(flag){
					try{
						Thread.sleep(1000);
						//在匿名线程中调用类中的其他方法
						otherMethod(id);
						if(i>13){
							flag = false;
						}
					}catch(Exception ef){
						ef.printStackTrace();
					}
				}
			}
		};
		//最后,启动这个内部线程
		Thread t = new Thread(runner);
		t.start();
	}
	//测试方法
	private void otherMethod(int i){
		System.out.println("可以直接调用类中的其他方法:"+i);
	}
}

测试结果如下://控制台每隔一秒钟输出下边的文字

可以直接调用类中的其他方法:4

可以直接调用类中的其他方法:0

可以直接调用类中的其他方法:9

可以直接调用类中的其他方法:5

可以直接调用类中的其他方法:1

可以直接调用类中的其他方法:6

可以直接调用类中的其他方法:2

可以直接调用类中的其他方法:8

可以直接调用类中的其他方法:7

可以直接调用类中的其他方法:3

 

 

2.TimerTask实现线程的demo

 

       使用多线程的还有可能是因为程序中要定时执行某些任务而又不能暂停当前的工作,JDK为这样的功能实现提供了两个类,一个是可作为一个独立线程对象运行的实现了Runnable接口的java.util.TimerTask类;另一个是调度TimerTask对象定时运行的java.util.Timer类。Timer类最常用的一个方法是:

       Public void schedule(TimerTask task,long delay,long period)

       这个方法会调度task对象在程序启动delay毫秒后,每隔period毫秒执行一次。

 

import java.util.Timer;
import java.util.TimerTask;
/**
 * 使用定时器执行线程
 * @author 赵广超
 */
public class TimerPrint extends TimerTask{
	private int runCount =0;//运行次数计数器
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Timer timer = new Timer();//创建一个定时器对象
		TimerPrint dw = new TimerPrint();//创建一个定时任务对象
		//调度这个定时任务在程序启动五秒后,每隔3秒运行一次
		timer.schedule(dw, 5000,3000);//这个方法是Timer中最常用的一个
	}
	/**
	 * 重写继承自TimerTask中的run方法,作为线程运行时被调用
	 */
	public void run(){
		runCount++;
		System.out.println(runCount +"次定时运行"+System.currentTimeMillis()/1000);
	}
}

测试结果如下://控制台每隔三秒输出一行字符串

1次定时运行1353589280

2次定时运行1353589281

3次定时运行1353589282

4次定时运行1353589283

5次定时运行1353589284

6次定时运行1353589285

 

 

20121122日写于后湖新村湘艺旅馆

 

5
1
分享到:
评论
3 楼 zjuttsw 2013-01-28  
Timer类内部采用的是单线程吧。
2 楼 中南大宝 2013-01-28  
liuyuanhui0301 写道
This article is benefit for beginner ~

thanks
1 楼 liuyuanhui0301 2013-01-28  
This article is benefit for beginner ~

相关推荐

    corejava多线程学习总结.pdf

    ### CoreJava多线程学习总结 #### 一、基本概念 多线程是现代软件开发中非常重要的一个概念,尤其在Java这样的高级编程语言中,它使得程序能够更高效地利用计算机资源,实现并发处理任务。为了更好地理解CoreJava...

    Java 多线程学习总结6

    在“Java多线程学习总结6”这个主题中,我们可以深入探讨Java多线程的实现、管理及优化。下面将详细阐述相关知识点。 1. **线程的创建方式** - **继承Thread类**:自定义类继承Thread类,并重写run()方法,创建...

    Java多线程学习总结.pdf

    Java多线程学习总结.pdf

    java多线程学习总结.docx

    ### Java多线程学习总结 #### 一、Java多线程基本概念 1. **线程状态** - Java中的线程状态分为以下几种:新生(New)、可运行(Runnable)、运行(Running)、等待/阻塞(Waiting/Blocked)以及终止(Terminated...

    Java 多线程学习总结归纳(附代码)

    下面是对Java多线程学习的详细解析。 1. **多线程概述**: 多线程是指一个程序内可以同时执行多个独立的执行流,每个执行流被称为一个线程。Java通过Thread类来代表线程,每个线程都有自己的生命周期,包括新建、...

    Java多线程学习总结

    Java多线程是编程中的重要概念,尤其在开发高并发、高性能的应用时不可或缺。本文将深入探讨Java中的线程和进程,以及如何在Java中实现多线程。 首先,理解线程和进程的概念至关重要。线程是操作系统分配CPU时间片...

    C++多线程学习

    在"C++多线程学习"这个主题中,我们主要探讨的是如何在C++环境中创建和管理线程,以及解决并发访问时可能出现的问题。 一、C++11及后续版本中的多线程支持 自C++11标准开始,C++提供了内置的多线程库`&lt;thread&gt;`,...

    Java多线程的总结

    Java多线程是Java编程中的一个核心概念,它在现代软件开发中扮演着至关重要的角色。...通过深入学习和实践上述Java多线程的知识点,开发者能够构建出高效、稳定、可控的多线程程序,满足各种复杂的并发需求。

    关于多线程学习总结

    经常看到一些招聘上要求应聘者必须熟练掌握多线程,而对于我这个着实的菜鸟来说多线程这个概念虽然经常听到,但是在实际操作中用的比较少,而且了解的也比较浅显,所以乘着这休息的几天天好好的学习学习,补上这方面...

    多线程学习文档

    ### 多线程学习文档知识点总结 #### 一、线程的基本概念及关系 ##### 进程(Process) - **定义**:进程是Windows系统中的一个基本概念,它包含了运行程序所需的所有资源。 - **特性**: - 相对独立性:一个进程...

Global site tag (gtag.js) - Google Analytics