黑马程序员-java学习之多线程

本文详细介绍了Java中创建和执行多线程的两种主要方法:通过继承Thread类和实现Runnable接口。对比了这两种方法的特点,并通过示例代码展示了如何使用它们来并发执行任务。

---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

1.线程简述

进程:正在进行中的程序

线程:就是进程中一个负责程序执行的控制单元

一个进程中可以有多条执行路径,称之为多线程

一个进程中至少要有一个线程

开启多个线程是为了同时运行多部分代码

每一个线程都有自己运行的内容。这个内容可以称为线程要执行的任务。

多线程好处:解决了多部分同时运行的问题。

多线程的弊端:线程太多回到效率的降低。

其实应用程序的执行都是cpu在做着快速的切换完成的,这个切换是随机的。

JVM启动时就启动了多个线程,至少有两个线程可以分析的出来。

1,执行main函数的线程,

该线程的任务代码都定义在main函数中。

2,负责垃圾回收的线程。

2.创建线程方法之一继承Thread类

如何创建一个线程呢?

创建线程方式一:继承Thread类。

定义一个类继承自Thread类,

然后覆盖Thread类中的run()方法,

然后创建此类的对象调用start()方法开启此线程

class Demo extends Thread {
	private String name;

	Demo(String name) {
		super(name);
		// this.name = name;
	}

	public void run() {
		for (int x = 0; x < 10; x++) {
			// for(int y=-9999999; y<999999999; y++){}
			System.out.println(name + "....x=" + x + ".....name="
					+ Thread.currentThread().getName());
		}
	}
}

class ThreadDemo2 {
	public static void main(String[] args) {
		Thread t1 = new Thread();
		Demo d1 = new Demo("旺财");
		Demo d2 = new Demo("xiaoqiang");
		// 开启线程,调用run方法。
		d1.start();
		d2.start();
		System.out.println("over...." + Thread.currentThread().getName());
	}
}
run方法就是封装自定义线程运行任务的 函数。run方法中定义就是线程要运行的任务代码。

开启线程是为了运行指定代码,所以只有继承Thread类,

并复写run方法。将运行的代码定义在run方法中即可。

3.创建线程方法之二实现Runnable接口

定义一个类实现Runnable的接口,实现接口中的run()方法,将线程的任务代码封装到run()方法中

创建Thread类的线程对象,将Runnable接口的子类对象作为Thread类的构造参数进行传递

因为线程的任务都封装在Runnable接口子类对象的run()方法中,所以要在线程对象创建时就必须明确要运行的任务

调用线程对象的start()方法开启线程

实现Runnable接口有什么好处??

将线程的任务从线程的子类分离出来,进行单独封装按照面向对象的思想将任务封装成对象,

避免了java单继承的局限性,所以这种方法比较常用

class Demo implements Runnable// extends Fu //准备扩展Demo类的功能,让其中的内容可以作为线程的任务执行。
// 通过接口的形式完成。
{
	public void run() {
		show();
	}

	public void show() {
		for (int x = 0; x < 20; x++) {
			System.out.println(Thread.currentThread().getName() + "....." + x);

		}
	}
}

class ThreadDemo {
	public static void main(String[] args) {
		Demo d = new Demo();
		Thread t1 = new Thread(d);
		Thread t2 = new Thread(d);
		t1.start();
		t2.start();
		// Demo d1 = new Demo();
		// Demo d2 = new Demo();
		// d1.start();
		// d2.start();
	}
}


---------------------- ASP.Net+Android+IO开发S.Net培训、期待与您交流! ----------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值