多线程基础知识

news/2025/1/17 5:57:03/

( 1 )  传统使ThreadRunnable实现 

1. Threadrun 

方式 

new Thread(){

@Override

public void run(){

while(true){

try {

Thread.sleep(2000); 

} catch (InterruptedException e) { 

e.printStackTrace(); 

}

}

}

}.start();

2. 在传ThreadRunnablerun法中代码 

new Thread(new Runnable(){ 

public void run(){

while(true){

try {

Thread.sleep(2000); 

} catch (InterruptedException e) { 

e.printStackTrace(); 

}

System.out.println(Thread.currentThread().getName()); 

}

}

}).start(); 

3.  

Threadrun()的源代以看其实两种方都是Thread对象runThread

类的 run 法没被覆并且 Thread 对象设置了一个 Runnable  run 调用 Runnable 

run 

 /** 

 * If this thread was constructed using a separate

 * <code>Runnable</code> run object, then that
 * <code>Runnable</code> object's <code>run</code> method is called;  * otherwise, this method does nothing and returns.

 * <p> 
 * Subclasses of <code>Thread</code> should override this method.

 * 

 * @see     #start() 

 * @see     #stop() 

 * @see     #Thread(ThreadGroup, Runnable, String) 

 */ 

 @Override 

 public void run() { 

 if (target != null) { 

 target.run();

 } 

( 2 )  定实TimerTimerTask 

Timer 际开应用场景不,一用其他三方但有时在一出现。

下面题来使Timer 

1. 请模面试题) 

要求:使用定时器,4秒执行一次,再间2秒执行一次,以此类推执行。 

class TimerTastCus extends TimerTask{ 

@Override

public void run() {

count = (count +1)%2; 

System.err.println("Boob boom "); 

new Timer().schedule(new TimerTastCus(), 2000+2000*count); 

}

}

Timer  timer = new Timer(); 

timer.schedule(new TimerTastCus(), 2000+2000*count); 

while (true) {

System.out.println(new  Date().getSeconds()); 

try {

Thread.sleep(1000); 

} catch (InterruptedException e) { 

// TODO Auto-generated catch block 

e.printStackTrace(); 

}

}

//PS:下面的代码中count变量中 

//此参数要使用在你匿名内部类中,使final修饰就无法对其值进行修改 

//只能改为静态变量 

private   static volatile int count  = 0; 

( 3 )  线程 

在引入线程于线执行的系统成混乱是在用临资源时线急用一台

机,使织在起,难区分。多个线急用共变量,格,链时,可会导致据处理

因此线同步主要使并发行的线程够有效共享源和使程的执可再现 

当线程发执时,源共享线程作,使线程之间存在下两关系 

1.  间接相制约一个的多个线程必要共系统资,如共享 CPU共享 I/O 备,谓间

互制约源于种资,打印就是好的线A使用印机它线程要等 

2.  直接相制约这种要是因线程间的如有线程 A 将计结果供给线程 B 进一处理,

那么线B在线A据送达前都处于 

间接相制约以称,直接互制可以称为,对互斥以这,线程 A 和线程 B 斥访问某

个资源它们间就顺序问要么线A 等待线B 操作毕,要么线程 B线程作完毕,这其实就

是线程同步。因包括互,互其实特殊的 

下面来体线 

要求线10次后线5。这 

public static void main(String[] args) { 

final Bussiness bussiness = new Bussiness(); 

//子线程 

new Thread(new Runnable() { 

@Override

public void run() { 

for (int i = 0; i < 3; i++) { 

bussiness.subMethod();

}

}

}).start();

//主线程 

for (int i = 0; i < 3; i++) { 

bussiness.mainMethod(); 

}

}

}

class Bussiness {

private boolean subFlag = true; 

public synchronized void mainMethod() { 

while (subFlag) {

try {

wait();

} catch (InterruptedException e) { 

e.printStackTrace(); 

}

}

for (int i = 0; i < 5; i++) { 

System.out.println(Thread.currentThread().getName() 

+ " : main thread running loop count -- " + i);

try {

Thread.sleep(1000); 

} catch (InterruptedException e) { 

e.printStackTrace(); 

}

}

subFlag = true;

notify();

}

public synchronized void subMethod() { 

while (!subFlag) {

try {

wait();

} catch (InterruptedException e) { 

e.printStackTrace(); 

}

}

for (int i = 0; i < 10; i++) { 

System.err.println(Thread.currentThread().getName() 

+ " : sub thread running loop count -- " + i);

try {

Thread.sleep(1000); 

} catch (InterruptedException e) { 

e.printStackTrace(); 

}

}

subFlag = false;

notify();

}

}

( 4 )  线程ThreadLocal 

l  ThreadLocal 的:线据共序代线程数据线行时 

l  每个线 ThreadLocal 象的 set  set 据当线线ThreadLocalMap然后往这map条记keyThreadLocalvalue是各set方法是每个线ThreadLocalMap对象对象KeyThreadLocal线ThreadLocal.remove()调用也线后也相关ThreadLocal 

l  ThreadLocal 

  订单条流水台几个操作一个事务中成,通常也即同一个线中进行处理,如果累加司应收款的操作失败了则应该把面的操有操使用代码分别 

  银行 减少在同一个务中完成,它们必须使相同的数据库连接对象转入和转出操作的代码分别是两个同的帐 

  Strut2ActionContext不同的线码操每个线线getContext象都个线程管调 getContext 个模 getContext 法,同一个 


http://www.ppmy.cn/news/100321.html

相关文章

不成方圆 - 中日互译模型

Github 占位仓库&#xff1a;https://github.com/One-sixth/BuChengFangYuan-ChineseJapaneseTranslation Huggingface 模型仓库&#xff1a;https://huggingface.co/spaces/twdac/BuChengFangYuan-ChineseJapaneseTranslation 不成方圆-中日互译 名称&#xff1a;不成方圆 -…

C#面向对象详细知识点

文章目录 1.面对对象的概念2. 面对对象-封装修饰符摘要表 3. 面对对象-继承4.面对对象-多态5.面对对象相关知识点补充&#xff08;1&#xff09;命名空间&#xff08;2&#xff09;关于修饰类的访问修饰符&#xff08;3&#xff09;万物之父中的方法&#xff08;4&#xff09;S…

十万个C语言冷知识

1.printf返回值&#xff1a; 成功&#xff1a;返回打印字符的个数 失败&#xff1a;返回EOF&#xff0c;EOF是文件结束的标志&#xff0c;宏定义为-1 #include <stdio.h> int main() {char str[] "123456789";printf("%d\n", printf("%d\n&quo…

vue常见面试总结

1.vue生命周期 2.组件传值 3.插槽&#xff1a;具名插槽&#xff1a;<slot name"header">slot> 作用域插槽 4.对 MVVM 的理解:MVVM 是 Model-View-ViewModel 的缩写,核心是提供对View 和 ViewModel 的双向数据绑定&#xff0c;这使得ViewModel 的状态改…

数据类型变量的命名规则转义字符(概念及详解)

数据类型&#xff1a; 序号符号类型占空间大小&#xff08;字节&#xff09;初始化1char字符数据类型1char ‘a’ ; 或 char “abc”;2short短整型2short a 0;3int整形4int a 0;4long长整型4long a 0;5long long更长的整形8long long a 0;6float单精度浮点型4float a …

IT知识百科:什么是分布式云?

在当今信息技术高速发展的时代&#xff0c;云计算已经成为了企业和个人的重要组成部分。而在云计算领域中&#xff0c;分布式云是一种重要的架构模式&#xff0c;它允许资源的分散部署和管理&#xff0c;以实现高可用性、可伸缩性和弹性的服务提供。 本文将详细介绍什么是分布…

史上最全Android性能优化方案解析

Android中的性能优分为以下几个方面&#xff1a; 布局优化 网络优化 安装包优化 内存优化 卡顿优化 启动优化 …… 一.布局优化 布局优化的本质就是减少View的层级。常见的布局优化方案如下&#xff1a; 在LinearLayout和RelativeLayout都可以完成布局的情况下优先选择LinearL…

MQTT(3):MQTT协议原理

官方文档中对于MQTT协议包的结构有着具体的说明&#xff1a;http://mqtt.org/documentation 在MQTT协议中&#xff0c;一个MQTT数据包由&#xff1a;固定头&#xff08;Fixed header&#xff09;、可变头&#xff08;Variable header&#xff09;、消息体&#xff08;payload&…