`
Luob.
  • 浏览: 1589968 次
  • 来自: 上海
社区版块
存档分类
最新评论

java之11天 多线程 (一)

    博客分类:
  • Java
阅读更多
进程 线程
main 和 run 的区别

/**
 *进程:是一个正在执行的程序
 *     每一个进程执行都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元.
 *     (一个进程中个至少有一个线程)
 *     
 *线程: 就是进程中的一个独立的控制单元.
 *      线程在控制这进程的执行
 * 
 *JVM 启动的时候会有一个进程.java.exe 
 *   该进程中至少有一个线程负责java程序的执行,而且这个线程运行的代码存在于main中 
 *   该线程称为 "主线程",
 *扩展:  其实更细节说明JVM,JVM 启动不止一个线程 ,还有一个 负责 "垃圾回收机制" 线程
 *
 *如何在自定义的代码中,自定义个 线程呢?
 *  通过对API的查找,java已经提供了对线程这类事物的描述,即使继承  Thread类
 *  
 *创建线程的第一种方案:继承 Thread.
 *    步骤:
 *    1.定义类继承Thread.
 *    2.复写Thread类中的run方法:目的 将自定义的代码存储在run方法中,让线程运行.
 *    3.调用线程对象的start()方法. 该方法有两个作用
 *        1.启动线程    2.调用个run()方法
 *        
 *发现运行结果每次都不同,因为多个线程都在获取CPU的执行权,谁就运行.
 *明确一点,在某个时刻,只能有一个程序在运行,(多核除外)
 *CPU在作者快速的切换,以达到看上去是同时在运行的效果.
 *我们可以形象的把多线程的运行行文在互相抢夺CPU的执行权,
 *
 *这就是 多线程的一个特性:随机性,谁签到谁执行,至于执行多长,CPU说的算.
 *
 *
 *为什么要覆盖run方法呢?
 *Thread类用于描述线程.
 *该类就定义了一个功能,用于存储线程要运行的代码.该存储功能就是run方法.
 *
 *run 和 main 的区别 
 *run():用于存储 Thread中线程要运行的代码
 *main():用于存放 "主线程": 要运行的代码;
 * 
 */

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

public class ThreadDemo {
	public static void main(String[] args) {
		Demo d=new Demo();   //创建 一个线程 
		d.start();   //开始启动 线程,并执行该线程的 run()方法
		//d.run(); 仅仅是 对象调用方法,还是交给主线程运行 ,而线程对象创建了,并没有运行.
		
		for (int i = 0; i < 60; i++) {//主线程运行的代码
			System.out.println("Hello world--"+i);
		}
	}

}



Thread
/**
 * 练习:
 * 创建两个线程,和主线程交替运行.
 * 
 * 原来 线程都有自己的名称 
 * Thread-编号  ,编号从0 开始
 * static Thread currentThread():获取当前线程对象  
 * 
 * getName():获取线程的名称.
 * 设置线程名称:setName或者构造函数.
 * 
 */
class Test extends Thread{
	//private String name;  //原来线程 都有自己的名字 从 Thread_0 
	Test(String name){  
		//this.name=name;
		super(name);
	}
	public void run(){
		for (int i = 0; i < 60; i++) {
			System.out.println((Thread.currentThread()==this)+this.getName()+" run ..."+i);
		}
	}
	
}

public class ThreadDemo2 {
	public static void main(String[] args) {
		Test t1=new Test("one--");
		Test t2=new Test("two++");
		t1.start();
		t2.start();
		
		for (int i = 0; i < 60; i++) {
			System.out.println("main run ..."+i);
		}
	}
}



线程运行的状态



Thread  买票
/**
 * 需求:简单的买票程序
 * 4个窗口同时买票
 */

class  SaleTicket  extends Thread{
	private static int ticks=100;  //必须是静态的   发现 这个静态变量的声明周期太长.
	
	public void run(){
		while(true){
			if(ticks>0){
				System.out.println(Thread.currentThread().getName()+"---sale--"+ticks--);
			}else
				currentThread().stop();
		}
	}
	
}


public class ThreadDemo3 {
	public static void main(String[] args) {
		SaleTicket t1=new SaleTicket();
		SaleTicket t2=new SaleTicket();
		SaleTicket t3=new SaleTicket();
		SaleTicket t4=new SaleTicket();
		
		t1.start();
		//t1.start(); 已经开启的线程 不需要在开启,也就是 说 一个线程 的start()不能被调用多次.
		t2.start();
		t3.start();
		t4.start();
	}

}


Runnable
/**
 * 需求 :卖票的简单程序
 *多个窗口同时卖票
 *
 *创建线程的第二种方式,实现 Runnable接口 
 *
 *步骤:
 *1.定义类实现Runnable接口
 *2.覆盖Runnable接口中的run方法 (将线程要运行的代码放在run方法中)
 *3.通过Thread类建立对象.
 *4.将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数.
 *   因为自定义的 run方法所属的对象是 Runnable接口的子类对象.
 *   所以要让线程去执行指定对象run方法,就必须明确该run所属对象.
 *5.调用Thread的start方法开启线程并调用Runnable接口子类中的run方法
 *
 *
 *实现方式  和 继承 有什么区别呢?
 *
 *实现方式好处: 避免了单继承的局限性
 *在定义线程时: 建议使用个 实现方式.
 *
 *两种方式的区别:
 *继承Thread:线程代码存放Thread子类run方法中
 *实现Runnable:线程代码存放在接口的子类的run方法中
 *
 */
class SaleTicket implements Runnable{
	private int ticks=100;  
	public void run(){
		while(true){
			if(ticks>0){
				System.out.println(Thread.currentThread().getName()+"---sale--"+ticks--);
			}
		}
	}
		
}

public class ThreadDemo1 {
	public static void main(String[] args) {
		SaleTicket t1=new SaleTicket();
		
		Thread th1=new Thread(t1);  //创建了一个线程 并将Runnable 子类对象给  Thread 构造函数
		Thread th2=new Thread(t1); 
		Thread th3=new Thread(t1);  
		Thread th4=new Thread(t1);  
		
		th1.start();
		th2.start();
		th3.start();
		th4.start();
		
	}

}



  • 大小: 18.4 KB
  • 大小: 17.9 KB
1
1
分享到:
评论
1 楼 whlikeok 2013-04-12  
好样的,加油

相关推荐

    java教程-每日一课,27天java从入门到进阶

    第11天:API类 第12天:字符串王者地位 第13天:算法工具类包装类 第14天:正则及其他类 第15-18天:数组到集合 第19天:文件操作IO 第20、21天:IO流文件操作类图 第22天:其他流 第23天:多线程 第24天:多线程...

    java100天速成

    6. **多线程**:Java对多线程的支持非常强大,你需要学习如何创建和管理线程,理解同步与互斥,以及线程池的概念,这对提升程序性能有很大帮助。 7. **网络编程**:Java的Socket编程能让你构建网络应用程序,理解...

    韩顺平30天学java

    9. **多线程**:理解并发编程的基础,如线程的创建、同步机制(synchronized关键字、wait/notify等)和线程池的使用。 10. **文件和目录操作**:学习如何在Java中创建、读取、修改和删除文件及目录。 11. **网络...

    尚硅谷_宋红康_第8章_多线程.pdf

    ·基于JDK 11,将Java8、Java9、Java10、Java11新特性一网打尽 ·课程中,Eclipse和IDEA这两种企业一线开发环境都使用到了 3.技术讲解更深入、更全面: ·课程共30天,715个知识视频小节,涉及主流Java使用的...

    java入门第一课

    Java入门第一课主要针对初学者,...此外,随着课程的深入,可能还会涉及到更多高级主题,如集合框架、多线程、网络编程等。对于持续更新的课程,可能还会有新的特性和实践案例添加进来,以保持内容的时效性和实用性。

    满天星星java源程序

    8. **多线程**:Java内置了对多线程的支持,包括线程的创建、同步和通信。 9. **IO与NIO**:Java I/O流系统和新引入的非阻塞IO(NIO)模型,为高性能网络编程提供基础。 10. **异常处理**:学习如何使用try-catch-...

    java视频教程_黑马Java零基础辅导班[第二期]11天课件源码

    《Java编程学习之旅:黑马Java零基础辅导班[第二期]11天课件源码解析》 在Java开发的世界里,扎实的基础是每一位程序员的基石。本篇将围绕"java视频教程_黑马Java零基础辅导班[第二期]11天课件源码"这一主题,深入...

    21天学好JAVA

    7. **多线程编程**:了解线程的概念,学习Thread类和Runnable接口,掌握同步和异步操作,以及线程间的通信。 8. **JAVA Swing和JavaFX**:学习如何使用JAVA创建图形用户界面(GUI),掌握Swing组件库的使用,或者更...

    21天学通java的源代码

    《21天学通Java》是一本面向初学者的编程教程,旨在帮助读者在短时间内掌握Java编程基础。这本书由庞永庆、庞丽娟等人编著,提供了丰富的实例和实践练习,以帮助学习者深入理解Java语言的核心概念。源代码是书中各个...

    21天精通java源代码

    6. **多线程**:Java提供了对多线程的支持,理解线程的创建、同步和通信,可以实现高效的并发处理。 7. **反射机制**:反射是Java的一大特色,它允许在运行时检查类、接口、字段和方法的信息,甚至动态调用方法。 ...

    21天学会Java--教案

    Java支持多线程编程,这使得程序可以同时执行多个任务。学习者将了解线程的概念,如何创建和管理线程,以及如何使用同步机制避免并发问题。 第18-21天:高级话题 这部分可能涵盖反射、泛型、枚举、注解等Java的高级...

    27天成为Java大神

    11. **Spring框架**:Spring是Java开发中最流行的框架之一,涵盖了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等概念,以及Spring Boot和Spring Cloud用于快速开发和微服务架构。 12. **单元测试与...

    java基础18天Typora笔记

    多线程编程是Java的一个重要特性,通过实现Runnable接口或继承Thread类创建线程。了解并发控制(synchronized关键字、wait/notify机制)、线程状态以及线程池的概念。 9. **文件与文件系统** 学习File类用于文件...

    21天学通Java 20小时多媒体语音视频教学

    《21天学通Java》是一本面向初学者的Java编程教材,旨在通过21天的学习计划,让读者快速掌握Java编程基础。20小时的多媒体语音视频教学则为学习者提供了更为直观和生动的学习方式,使理论知识与实践操作相结合,加深...

    21天学会java光盘电子教案(PPT).

    9. **多线程**:Java内置了对多线程的支持,你可以通过实现Runnable接口或继承Thread类来创建线程。 10. **Swing和JavaFX**:对于图形用户界面(GUI)开发,Java提供了Swing和JavaFX库。这两个库包含了各种组件和...

    21天学java源代码

    9. **多线程**:Java内置了对多线程的支持,学习者需要理解线程的创建、同步、生命周期管理等概念。 10. **文件和目录操作**:Java提供了File类来处理文件和目录,包括创建、删除、重命名等操作。 11. **Swing和...

    21天学java培训笔记和代码

    11. **多线程**:Java内置了多线程支持,通过Thread类或实现Runnable接口创建并管理线程,实现并发执行。 12. **Swing与JavaFX**:Java提供GUI(图形用户界面)工具包,如Swing和JavaFX,用于构建桌面应用。 13. *...

    Java 21天学通java

    9. **多线程**:Java支持多线程编程,通过Thread类和Runnable接口可以创建并管理多个执行线程,提高程序的并发性能。 10. **Java Swing和JavaFX**:这两是Java的图形用户界面(GUI)库,用于构建桌面应用程序。...

    21天自学速成 Java 语言 电子书

    11. **多线程**:学习如何创建和管理线程,同步机制(synchronized关键字、wait()、notify()、notifyAll()),以及线程池的使用。 12. **网络编程**:了解套接字(Socket)编程,包括TCP和UDP通信。 13. **Java...

    21天学通Java.第7版-中文版-良心积分价

    10. **多线程**:Java内置了对多线程的支持,通过实现Runnable接口或继承Thread类来创建线程。了解线程的同步和通信机制,如synchronized关键字、wait()、notify()和notifyAll()方法。 11. **文件和目录操作**:...

Global site tag (gtag.js) - Google Analytics