多线程学习 实现多线程的两种方式 一

实现多线程两种方式
一 继承Thread类
二 实现Runnable接口

因为Thread类已经实现了Runnable接口,
在这里插入图片描述
所以两者本质都是实现Runnable接口,并且实现Runnable接口中的run方法.

下面写了一个小例子,直接上代码。

public class TestThread {
    public static void main(String[] args) {
       /* Thread thread = new Thread(); //创建一个线程对象
        thread.start(); //对线程对象调用start方法  创建线程(让线程启动)
        //os操作系统中创建线程
//        thread.stop();  //线程停下来*/

        ThreadA threadA = new ThreadA();
//        threadA.start();    //调用start方法创建线程
//        threadA.run();    //错误

//        ThreadB threadB = new ThreadB();
        Runnable target=new ThreadB();
        Thread threadB = new Thread(target);

        threadA.start();    //调用start方法创建线程
        threadB.start();
    }
}

class ThreadA extends Thread{

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

class ThreadB implements Runnable{

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

运行结果,粘贴了其中的一部分。
在这里插入图片描述
为什么会是这种结果,而不是将threadA线程执行完,在执行threadB线程呢?因为线程是操作系统分cpu时间片调度运行,所以threadA线程与threadB线程会交替执行。

下面是我学习时的一些总结。

进程:操作系统 os (Operating System)并发的一个任务
计算机核心(一个cpu),中央处理器
计算机: cpu分时间片交替执行  宏观并行,微观串行     时间片由谁调度  ==》 操作系统调度

java程序运行在虚拟机中,虚拟机相当于一个软件,虚拟机本身是一个进程。(单进程)
线程==》一个进程中,并发执行的顺序流程

操作系统并发多进程   进程并发多线程
线程的组成:1、cpu时间片  由os负责调度分配   2、data 数据  3、code 代码

jdk 负责编译java代码  jre java代码的运行环境  java虚拟机 java代码在java虚拟机中运行  jdk包含jre jre包含java虚拟机
数据:
创建对象:在java虚拟机的内存分配空间  虚拟机内存: 1、堆空间 2、栈空间 3、代码空间(由程序员指定)
学习多线程:堆 栈 搞明白
堆空间负责存储对象  其实就是存属性(实例变量)   类中方法外
栈空间负责存储局部变量  方法内

堆空间共享,栈空间独立  创建对象共享,局部变量独立。  线程是轻量级的进程。==》数据交换 只需要切换栈空间
进程间,堆栈都是独立的。 数据交换 堆栈空间都需要切换

任何一个java程序都需要一个主线程,  Thread线程对象代表一个线程
线程是操作系统维护的,线程对象在虚拟机中的堆空间中。

另外还可以设置一下线程的优先级,代码如下

public class TestThread {
	public static void main(String[] args) {
		Runnable task1 = new Task1();
		Thread t1 = new Thread(task1);
		t1.setPriority(10);	//设置线程的优先级  1-10的整数 10为最高优先级  优先让t1线程先执行完毕,不同的操作系统os有不同的线程调度策略,不是每个操作系统都支持优先级的
		//t1.setPriority(Thread.MAX_PRIORITY);
		
		Thread t2 = new TaskThread(); 
		
		//主线程让t1 t2线程启动,t1 t2启动后,主线程结束使命,进入终止状态。
		t1.start();	//这两个方法在主线程中
		t2.start();	//这两个方法在主线程中
	}
}

class Task1 implements Runnable{
	public void run(){
		for(int i = 1 ; i <= 1000 ; i++){
			System.out.println("### "+i);
		}
	}
}
class TaskThread extends Thread{
	public void run(){
		for(int i = 1 ; i <= 1000 ; i++){
			System.out.println("$$$ "+i);
		}
	}
}

这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上。 欢迎加入技术群聊!

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值