博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
多线程学习 实现多线程的两种方式 一
阅读量:4179 次
发布时间:2019-05-26

本文共 2405 字,大约阅读时间需要 8 分钟。

实现多线程两种方式

一 继承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);		}	}}

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

在这里插入图片描述

转载地址:http://dkoai.baihongyu.com/

你可能感兴趣的文章
hbase shell出现ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException
查看>>
让代码变得更优雅-Lombok
查看>>
解决Rhythmbox乱码
查看>>
豆瓣爱问共享资料插件发布啦
查看>>
Ubuntu10.10 CAJView安装 读取nh\kdh\caj文件 成功
查看>>
kermit的安装和配置
查看>>
vim 配置
查看>>
openocd zylin
查看>>
进程创建时文件系统处理
查看>>
内核线程创建
查看>>
linux中cat命令使用详解
查看>>
java中的异常机制
查看>>
商务智能-基本方法-数据钻取
查看>>
C++程序员技术需求规划(发展方向)
查看>>
JNI
查看>>
CVE-2019-0708漏洞影响面分析及采用多种规则的检测方法
查看>>
拿走不谢!固件逆向分析过程中的工具和技巧(上)
查看>>
整理网络安全措施的5个小技巧
查看>>
入侵win10(下)--渗透系统
查看>>
烦请解释一下“驱动表”的概念
查看>>