本文共 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/