java多线程小题一瞥
2023-09-14 09:06:28 时间
有如下线程类定义:
public class MyThread extends Thread { private static int num = 0; public MyThread() { num++; } @Override public void run() { System.out.println("主动创建的第" + num + "个线程" + currentThread().getName()); } }
看如下方法的执行结果:
public static void main(String args[]) throws Exception { for (int i = 1; i <= 10; i++) { MyThread th = new MyThread(); th.setName("thread_" + i); th.start(); } }
下面是结果:
主动创建的第10个线程thread_1 主动创建的第10个线程thread_3 主动创建的第10个线程thread_2 主动创建的第10个线程thread_5 主动创建的第10个线程thread_7 主动创建的第10个线程thread_9 主动创建的第10个线程thread_6 主动创建的第10个线程thread_8 主动创建的第10个线程thread_4 主动创建的第10个线程thread_10
打印出来的num都是10,也许会出乎我们的意料。释义:Thread类的start()方法用来创建一个新线程来执行子任务, new MyThread()语句是在主线程执行的, 所以,自然是num会递增,直到loop结束,值为10。
那么,改造一下main方法逻辑, 在循环里每个th.start()后面加上一句Thread.sleep,结果会有所不同。如果设定sleep的毫秒数比较大,那么会按我们期望的num递增来输出结果。这个值取决于主机的处理能力,如果太小,比如1ms,可能也会打印出重复的num。 释义:一个进程在运行态时调用sleep(),进入等待态,这时其他子线程开始执行。sleep详解可参见https://www.cnblogs.com/guodongli/archive/2011/04/07/2007721.html
▍|▍▍||▍| ▍|▍▍||▍| ▍|▍▍||▍|▍▍||▍| ▍|▍▍||▍| ▍|▍▍||▍|▍▍||▍| ▍|▍▍||▍| ▍|▍▍||▍|▍▍||▍| ▍|▍▍||▍| ▍|▍▍||
附java多线程相关知识:
线程与进程
1 线程:进程中负责程序执行的执行单元
线程本身依靠程序进行运行
线程是程序中的顺序控制流,只能使用分配给程序的资源和环境
2 进程:执行中的程序
一个进程至少包含一个线程
3 单线程:程序中只存在一个线程,实际上主方法就是一个主线程
4 多线程:在一个程序中运行多个任务
目的是更好地使用CPU资源
在java中,有2种方式来创建线程执行子任务:
- 直接继承Thread类,调用start方法
- 实现Runnable接口来定义一个子任务,然后交由Thread去执行
Thread和Runnable的区别:
Runnable的中文意思是“任务”,顾名思义,通过实现Runnable接口可以定义一个子任务,然后将子任务交给Thread去执行。
Thread类实现了Runnable接口
Thread的start方法:创建一个新线程来执行子任务。
new Thread(new Runnable() { public void run() { ... ... } }).start();
start方法和run方法的区别:
- start用来创建新线程来异步执行子任务
- run只是一个普通的方法,调用run不会新建线程
相关文章
- Java笔记:多线程
- 《Effective Java》第2章 对所有对象都通用的方法
- JAVA多线程售票问题
- java定时器和多线程实践记录
- Java多线程--线程常用操作方法
- Java实现 LeetCode 486 预测赢家
- java实现第四届蓝桥杯三部排序
- Java实现第九届蓝桥杯星期一
- java算法集训代码填空题练习3
- Java实现 蓝桥杯VIP 算法训练 明明的随机数
- Java实现 蓝桥杯 算法提高 概率计算
- 关于Java中子类调用父类方法
- java线程-java多线程之可见性
- Java核心知识点学习----多线程并发之线程间的通信,notify,wait
- java多线程 -- 线程八锁
- java多线程 --ConcurrentLinkedQueue 非阻塞 线程安全队列
- Java多线程学习笔记 - 五、Java中线程的生命周期
- 请解释一下Java多线程回调是什么意思?
- java多线程中 volatile与synchronized的区别-阿里
- Atitit.面向接口的web 原理与设计重写 路由启动绑定配置url router rewriting urlpage mvc mvp的 java c#.net php js
- Linux(centOS):Exception in thread "main" java.lang.UnsupportedClassVersionError***
- Java扑克牌(多线程)
- Java Web项目结构
- java类和对象之间的差
- 【Java面试】并发编程实战(线程控制操作详解)
- 【java】Java并发编程--Java实现多线程的4种方式