黑马程序员—java异常
来源:互联网 发布:mac桌面东西没了 编辑:程序博客网 时间:2024/06/05 20:35
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
1.线程 与 进程
进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程。
线程是指进程中的一个执行任务(控制单元),一个进程中可以运行多个线程,多个线程可共享数据。
一个进程中至少有一个线程
java VM 启动的时候会有一个进程 java.exe
该进程中至少一个线程负责java程序的执行。而且这个线程运行代码存在于main方法中,该线程称之为主线程
扩展:其实更细节说明jvm jvm启动不止一个线程,还有负责垃圾回收机制的线程。
2.线程的创建
1)创建线程的第一种方式:
继承Thread类。
步骤:
1.定义类继承Thread
2.复写Thread类中的run方法
目的:将自定义代码存储在run方法。让线程运行
3.调用线程的start 方法
该方法两个作用:启动线程 调用run方法
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) {
// for (int i = 0; i < 400; i++) {
// System.out.println("Hello World");
// }
Demo d = new Demo(); //创建好一个线程
d.start(); //开启线程 并执行run方法
//d.run(); //只是调用对象的方法,创建线程没有运行
for(int i = 0; i<60 ; i++)
System.out.println("Hello World!----"+i);
}
}
发现运行结果每一次都不同。
因为多个线程都获取cpu的执行权。 cpu执行到谁,谁就执行
明确一点,在某一个时刻,只能有一个程序在运行。
cpu在做着快速的切换,以达到看上去是同时运行的效果
多线程的一个特性:随机性
为什么要覆盖run方法呢?
Thread类用于描述线程。
该类就定义一个功能,用于存储线程要运行的代码,该存储功能就是run方法
也就是说Thread类中的run方法,用于存储线程要运行的代码
练习:
package day11;
/*
* 练习:
* 创建两个线程,和主线程交替运行
*
* 原来线程都有自己默认的名字
* Thread-编号 该编号从0开始
*
*
* static Thread currentThread(): 获取当前线程对象
* getName():获取线程的名称
*
* 设置线程名称:setName或者构造函数。
*/
class Test extends Thread
{
//private String name;
public Test(String name){
//this.name = name;
super(name);
}
public void run() {
for (int i = 0; i < 60; i++) {
System.out.println(Thread.currentThread().getName()+" run..."+i);
}
}
}
public class ThreadTest {
public static void main(String[] args) {
Test t1 = new Test("test1");
Test t2 = new Test("test2");
t1.start();
t2.start();
for (int i = 0; i < 60; i++) {
System.out.println("main....."+i);
}
}
}
2)创建线程的第二种方式:
实现Runnable接口
步骤:
1.定义类实现Runnable接口
2.覆盖Runnable接口中的run方法
将线程要运行的代码存放在改run方法中
3.通过Thread类建立线程对象
4.将Runnable接口的子类对象作为实际参数传递给Thread类的构造方法
5.调用Thread类的start方法开启线程并调用Runnable接口子类的run方法
package day11;
/*
* 需求: 简单的买票程序
* 多个窗口同时卖票
*
*/
class Ticket implements Runnable //extends Thread
{
private static int tick = 100;
public void run(){
System.out.println(Thread.currentThread().getName()+"sale: "+tick--);
}
}
public class TicketDemo {
public static void main(String[] args) {
Ticket t = new Ticket();
Thread t1 = new Thread(t);//创建一个线程
Thread t2 = new Thread(t);//创建一个线程
Thread t3 = new Thread(t);//创建一个线程
Thread t4 = new Thread(t);//创建一个线程
t1.start();
t2.start();
t3.start();
t4.start();
/* Ticket t1 = new Ticket();
// Ticket t2 = new Ticket();
// Ticket t3 = new Ticket();
// Ticket t4 = new Ticket();
t1.start();
t1.start();
t1.start();
t1.start();*/
}
}
为什么要将Runnable接口的子类对象传递给Thread的构造方法。
因为,自定义的run方法所属的对象是Runnable接口的子类对象。
所以要让线程去指定对象的run方法。就必须明确该run方法所属对象
实现方式和继承方式有什么区别?
实现方式好处:避免了单继承的局限性。
实现Runnable,线程代码存在接口的子类的run方法。
两种方式区别:
继承Thread:线程代码存放Thread子类run方法中。
实现Runnable,线程代码存在接口的子类的run方法。
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
详细请查看www.itheima.com
0 0
- 黑马程序员—java异常
- 黑马程序员 Java异常
- 黑马程序员-java异常
- 黑马程序员-java异常
- 黑马程序员 Java 异常
- 黑马程序员:java异常
- 黑马程序员-----java 异常
- 黑马程序员 java 异常
- 黑马程序员-java异常
- 黑马程序员-java异常
- 黑马程序员--java--异常
- 《黑马程序员》Java 异常
- 【黑马程序员】 java笔记——异常
- Java异常学习——黑马程序员
- 黑马程序员——Java异常
- 黑马程序员——Java基础---异常
- 黑马程序员——Java基础--- 异常
- 黑马程序员——Java异常、包
- Asp.Net Mvc 4 使用Ajax 遇到的问题
- CXF学习02---处理JavaBean类型与List的集合类型
- js控制图片自适应屏幕
- NGUI学习之路(2)Scroll View 简洁版【NGUI 2.6.3】
- Java卡环境介绍
- 黑马程序员—java异常
- 深入探讨在集群环境中使用 EhCache 缓存系统
- java Swing 之文本域控件的使用
- C++引用的本质与修改引用的方法
- split image使用方法
- nefu 630 Min Chain
- js学习小结(六)2014.5.2(BOM对象)
- CentOS 6.4下安装和配置Samba
- Spring的IOC原理[通俗]