JavaSE_day43(多线程单线程区别,图解main方法若是单多线程该如何执行,如何使用多线程2种方式)

1 A.java

 * 学习多线程之前,我们先要了解几个关于多线程有关的概念。
    
    A:进程:进程指正在运行的程序。确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能。
    
    B:线程:线程是进程中的一个执行单元,负责当前进程中程序的执行,一个进程中至少有一个线程。一个进程中是可以有多个线程的,这个应用程序也可以称之为多线程程序。
    
    C:简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程
    
    什么是多线程呢?即就是一个程序中有多个线程在同时执行。(同一时间做多件事情,安全性低,效率高)

* 多线程的实现方式:
 *         方式1:

 *             一种方法是将类声明为 Thread 的子类。
 *             该子类应重写 Thread 类的 run 方法。
 *             接下来可以分配/创建并启动该子类的实例
 * 
 * Thread
 *         String getName()      返回该线程的名称。 
 * 
 *         void   setName(String name) 改变线程名称,使之与参数 name 相同。
 * 
 * 现在使用了多线程,所以输出是切换性的,不会按顺序执行,先是张三执行完,再次依次往后执行...
 * 
 * CPU执行程序的随机性,多个程序进行高速切换,所以并不不会感觉有卡顿现象!
    
    
    右键选择,Source,选择Override选择需要重写的方法

定义多线程类:

public class A_MyThread extends Thread {

	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			System.out.println(getName() + ":" + i);
		}
	}
}

定义主类:

public class A_ThreadMain {
	public static void main(String[] args) {
		
		//创建线程实例
		A_MyThread mt = new A_MyThread();
		//修改线程名字
		mt.setName("张三");  //不改名字就是默认是从Thread-0,Thread-1...开始
		
		//启动线程
		mt.start();
		
		//创建线程实例
		A_MyThread mt2 = new A_MyThread();
		mt2.setName("老王");
		
		//启动线程
		mt2.start();
	}
}

2 B.java

 * 主方法中的代码(方法)执行是多线程吗?
 *         图解:

 

 


 *         主方法的(方法)执行是单线程!

3 C.java

 * 多线程的实现方式:
 *         方式2:

 *     创建线程的另一种方法是声明实现 Runnable 接口的类。该类然后实现 run 方法。然后创建Runnable的子类对象,传入到某个线程的构造方法中,开启线程。
    
    为何要实现Runnable接口,Runable是啥玩意呢?继续API搜索。
    
    查看Runnable接口说明文档:Runnable接口用来指定每个线程要执行的任务。包含了一个 run 的无参数抽象方法,需要由接口实现类重写该方法。

 *     1、定义类实现Runnable接口。
    2、覆盖接口中的run方法。。
    3、创建Thread类的对象
    4、将Runnable接口的子类对象作为参数传递给Thread类的构造函数。
    5、调用Thread类的start方法开启线程。

    由于java是单继承,所以再搞一个接口出来实现多线程是非常有意义的!

定义多线程类

public class B_MyThread implements Runnable {
	int num;
	
	public B_MyThread() {
	}
	
	@Override
	public void run() {
		for (int i = 0; i < 100; i++) {
			Thread t = Thread.currentThread();//currentThread()   返回对当前正在执行的线程对象的引用。
			System.out.println(t.getName() + ":" + i);
			
		/*	//链式编程
			System.out.println(Thread.currentThread().getName() + ":" + i + num);*/
		}
	}

}

主类:

public class B_ThreadMain {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//创建线程实例
		B_MyThread mt = new B_MyThread();
		Thread t = new Thread(mt);
		
		t.setName("xu");
		t.start();
		
		//创建线程实例
		B_MyThread mt2 = new B_MyThread();
		Thread t2 = new Thread(mt2);
		
		t2.setName("ui");
		t2.start();
		
		
	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值