Android-线程常用方法-线程同步

Android 异步转同步有哪些方法(Java) 然后,我们调用Future对象的get()方法阻塞当前线程,直到异步线程执行完成并返回结果。在异步线程中执行完耗时操作后,调用CountDownLatch的countDown方法,主线程调用await方法等待计数值变为0,然后继续执行。在上述代码中,getResultSync方法会在调用sendMessageSync方法后阻塞,直到异步任务完成并发送消息后,才会继续执行并返回异步任务的结果。来等待子线程执行完成。之后,可以在注释部分处理子线程执行完成后的逻辑。在上面的代码中,子线程执行异步操作后,通过。 阅读详情

线程常用方法:

1.start():线程调用该方法将启动线程从新建状态进入就绪,一旦轮到享用CPU资源时,就开始自己的生命周期

2.run():Thread类的run()方法与Runnable接口的run()方法的功能和作用相同,都用来定义线程对象被调度之后所执行的操作,都是系统自动调用而用户程序不得引用的方法

3.sleep(int millsecong):优先级高的线程可以在它的run()方法中调用sleep方法来使自己放弃CPU资源,休眠一段时间

4.isAlive():线程处于"新建"状态时,线程调用isAlive()方法返回false,在线程的run()方法结束之前,即没有进入死亡状态之前,线程调用isAlive()方法返回true

5.currentThread():该方法是Thread类中的类方法,可以用类名调用,该方法返回当前正在使用CPU资源的线程

6.interrupt():一个正在使用CPU资源的线程可以让休眠的线程调用interrupt()方法"吵醒"自己,即导致休眠的线程发生InterruptedException异常,从而结束休眠,重新排队等待CPU资源

线程同步

所谓线程同步就是用synchronized关键字修饰同步方法,即程序中的若干个线程都需要使用一个方法,而这个方法用synchronized给予了修饰

多个线程调用synchronized方法必须遵守同步机制:当一个线程使用这个方法时,其他线程想使用这个方法就必须等待,直到线程使用完该方法,使用多线程解决许多实际问题时,可能要把某些修改数据的方法用关键字synchronized来修饰

线程同步的方式和机制:

临界区、互斥量、事件、信号量四种方式

临界区(Critical Section)、互斥量(Mutex)、信号量(Semaphore)、事件(Event)的区别

1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。在任意时刻只允许一个线程对共享资源进行访问,如果有多个线程试图访问公共资源,那么在有一个线程进入后,其他试图访问公共资源的线程将被挂起,并一直等到进入临界区的线程离开,临界区在被释放后,其他线程才可以抢占。

2、互斥量:采用互斥对象机制。 只有拥有互斥对象的线程才有访问公共资源的权限,因为互斥对象只有一个,所以能保证公共资源不会同时被多个线程访问。互斥不仅能实现同一应用程序的公共资源安全共享,还能实现不同应用程序的公共资源安全共享

3、信号量:它允许多个线程在同一时刻访问同一资源,但是需要限制在同一时刻访问此资源的最大线程数目

4、事 件: 通过通知操作的方式来保持线程的同步,还可以方便实现对多个线程的优先级比较的操作

public class Demo45{

public static void main(String[] args){
    Bank bank = new bank();
    bank.setMoney(200);
    System.out.println("银行账上还有200");

    Thread accountant = new Thread(bank);
    accountant.setName("会计");
    Thread cashier = new Thread(bank);
    cashier.setName("出纳");

    accountant.start();
    cashier.start();
}

}

public class Bank implements Runnable{

int money;

 public void setMoney(int n){
    money = n;
}

@Override
public void run(){
    if(Thread.currentThread().getMoney().equals("会计")){
        saveOrTake(300);
    }else if (Thread.currentThread().getMoney().equals("出纳")){
        saveOrTake(150);
    }
}

public synchronized void saveOrTake(int money){
    if(Thread.currentThread().getMoney().equals("会计")){
        for(int i = 0;i < 3; i++){
           money = money+m/3;
           System.out.println(Thread.currentThread().getName()+"存入"+m/3",账上还有"+money+",休息一会再存");

           try{
           Thread.sleep(1000);
        }catch(InterruptedException e){
           e.printStackTrace();
        }
      }
    }else if (Thread.currentThread().getMoney().equals("出纳")){
        for(int i = 0;i < 3; i++){
           money = money-m/3;
           System.out.println(Thread.currentThread().getName()+"取出"+m/3",账上还有"+money+",休息一会再取");

           try{
           Thread.sleep(1000);
        }catch(InterruptedException e){
           e.printStackTrace();
        }
    }
}

}
运行结果:
在这里插入图片描述

tcllib2.0 package - csv tcl lib 的csv库 阅读详情

相关推荐

关于RTP时间戳以及播放器对时间戳的处理

首先,了解时间戳几个基本概念: 时间戳单位:时间戳计算的单位不是秒之类的单位,而是由采样频率所代替的单位,这样做的目的就是为了是时间戳单位更为精准。比如说一个音频的采样频率为8000Hz,那么我们可以把时间戳单位设为1 / 8000。 时间戳增量:相邻两帧之间的时间差(以时间戳单位为基准)。 采样频率: 有些地方也叫时钟频率,即 每秒钟抽取样本的次数,例如音频的采...

toshiba689的专栏 3052

Android系统-线程-线程同步

1、使用锁对象:通过使用ReentrantLock,synchronized关键字锁对象,实现线程同步。2、volatile关键字:声明一个volatile变量可以保证其对所有线程的可见性,每次写入操作都会强制刷新缓存。这种方法只适用于只有一个线程进行写操作,其他线程进行读操作的情况3、使用wait/notify机制:wait/notify机制是一种高级的,灵活的线程同步方法。

haigand的专栏 846

利用Skipper跨层追踪技术高效定位LVS Short问题

本文详细介绍了如何利用Skipper跨层追踪技术高效定位LVS Short问题。通过解析Skipper的跨层trace net原理和实战操作步骤,帮助芯片设计工程师快速识别版图中的短路问题,显著提升验证效率。文章还提供了处理大规模设计的高级技巧和常见问题排查方法。

weixin_29239661的博客 510

Android线程同步方式

4. 使用CountDownLatch、CyclicBarrier等辅助类:这些类提供了更高级的线程同步功能,可以实现多个线程之间的同步。wait和notify方法需要在synchronized块内部调用,通过wait释放锁,让其他线程占用该锁,notify则是唤醒等待该锁的线程。5. 使用Atomic类:Atomic类提供了一些原子操作,可以避免多个线程同时操作同一个变量时产生的数据竞争问题。这种方法适用于只有一个线程进行写操作,其他线程进行读操作的情况。这种方法是Java最基本的线程同步技术。

qq_41878758的博客 1387

TikTok滑块验证码verifyV2逆向实战:从fp生成到captchabody加密的完整流程解析

本文详细解析了TikTok滑块验证码verifyV2的逆向工程全流程,从fp参数生成到captchabody加密机制,涵盖了验证码触发、WASM解密、轨迹模拟等关键技术点。通过实战案例和代码示例,帮助开发者深入理解反爬机制,提升逆向工程能力,应对复杂的验证挑战。

weixin_28568819的博客 481

点云配准SIFT+SI+RANSAC+ICP

Spin Image(SI)是一种用于点云数据描述的特征描述子,广泛应用于三维点云配准、识别和重建等领域。它能够捕捉点云中的局部几何信息,具有旋转不变性和部分平移不变性等优点,是一种非常强大的特征描述子。Spin Image是一种强大的点云特征描述子,具有旋转不变性、局部几何信息捕捉等优点,适用于点云配准、目标识别和三维重建等多个领域。通过合理选择局部区域、建立参考框架和计算描述子,可以充分利用Spin Image描述点云的特征,从而实现各种三维场景分析和处理任务。

点云兔子的博客 559

Android多线程学习:多线程同步

线程安全是以牺牲程序运行效率为代价的,因此在注意线程安全的同时,也要注意不要滥用锁和同步方法,尽量只对那些会改变竞争资源的方法进行同步。预防死锁:这是一种较简单和直观的事先预防的方法。但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源,然后采取适当措施,从系统中将已发生的死锁清除掉。避免死锁:该方法同样是属于事先预防的策略,但它并不须事先采取各种限制措施去破坏产生死锁的的四个必要条件,而是在资源的动态分配过程中,用某种方法去防止系统进入不安全状态,从而避免发生死锁。

孔小乐的博客 676

在 FreeStyle SAP UI5 应用里优雅落地 Draft 草稿机制:用 DraftManager 封装 DraftController 的一套实战套路

SAP Fiori应用中,Draft草稿机制是解决业务中断、多人协作和长表单填写等痛点的核心能力。本文提出了一套针对FreeStyle SAP UI5应用的Draft管理方案,通过封装sap.ui.generic.app.transaction.DraftController为DraftManager服务类,将复杂的草稿操作逻辑集中管理。该方案实现了草稿的创建、激活、丢弃等核心功能,使控制器只需调用简单意图式API即可完成操作,同时解决了组件化架构下的上下文切换、统一错误处理等问题。文章还详细介绍了后端Dr

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2751

Android之多线程实现方式及并发与同步

前言:说到多线程,就不得不先说它和进程的关系,这里先简单解释一下,当一个app程序启动时系统默认有一个进程和主线程,在程序运行中想要异步操作,就会创建不止一个子线程即多线程。用多线程只有一个目的,那就是更好的利用cpu的资源,因为所有的多线程代码都可以用单线程来实现。说这个话其实只有一半对,因为反应“多角色”的程序代码,最起码每个角色要给他一个线程吧,否则连实际场景都无法模拟,当然也没法说能用单线程来实现:比如最常见的“生产者,消费者模型”。 一、多线程实现方式:(三种) 1、继承Thread类,重写r

u010227042的博客 4262

200、从反激到LLC:工程师的成长之路

文章摘要: 本文以工程师视角探讨从反激式到LLC电源设计的思维转变。通过48V通信电源故障案例,揭示LLC谐振电容ESR温度特性引发的隐患,强调LLC需精确计算与测试。对比反激与LLC的核心差异:反激需控制寄生参数(如漏感尖峰、电容ESR),而LLC的关键在于频率响应和死区时间优化。作者提出三大思维转变:从匝比计算转向增益曲线分析,从时域波形观察转向频域频谱诊断,从元件更换转向参数调整。最后给出实战建议,包括建立故障库、关注元件参数细节及示波器调试技巧,指出工程师需从"控制"思维升级为"谐振"思维,实现技术

Jack010169的博客 323

C++实现设计ATM机系统

这个示例实现了一个基本的ATM机系统,支持注册、登录、存款、取款、查询余额和保存数据等功能。当然,这只是一个简单的ATM机模拟,实际的ATM机系统需要更复杂的逻辑和更严格的安全措施。C++编写一个简单的ATM机系统,我将提供一个基本的实现示例,但由于ATM机系统的复杂性和安全性要求,这只是一个简单的模拟,不适合在实际环境中使用。试设计一简单模拟ATM机系统,系统以菜单方式工作,采用自定义函数设计各功能模块被主菜单调用,使之能提供以下基本选项。=========欢迎使用ATM=========

走向CTO的路上... 1243

安卓同步锁的使用

安卓同步锁使用小结 一、同步机制synchronized 作用 Synchronized是Java中解决并发问题的一种最常用最简单的方法 ,他可以确保线程互斥的访问同步代码 1、当多线程之间存在共享数据时候,synchronized可以保证同一时间只有一个线程执行锁定的代码块儿,防止线程交叉执行 2、 可见性 对于被synchronized修饰的代码块,如果A线程执行结束,会强制刷新线程缓存内容到内存,同时通知其它synchronized修饰的线程x的值无效,需要重新读取(这点跟volatile很相似),因

wz_1992的博客 2999

Modis数据处理工具:MRT百度网盘下载和手把手图文安装教程

如下图所示为MODIS Reprojection Tool(MRT)的软界面,看似简单,却是Modis遥感影像必不可少的处理工具,如投影变换等。本文以图文并茂的形式,详细讲解MRT软件在Windows10平台上的安装过程,并附MRT软件百度网盘下载地址。 Modis Tool主界面: 一、安装过程 1、安装Java运行环境 双击Java.exe,安装运行环境。默认的安装路径为C:\Program Files (x86)\Java\jre6\bin,后面需要用到这个路径。 等待...

智慧空间实验室 2623

android service线程的区别,Android进程与线程区别

Android 中如何关闭线程Android开发中如何使用多线程android判断一个线程是否存在我要做一个定时提醒的功能,在程序的主Activiyt里启动Service,在Servic线程如果是一直运行的,就检测service是否已经启动,启动了就不开启线程。每次开启程序就启动服务,线程也新建,建议看一下service的生命周期。。android怎么从线程里取值我想把result1的值传出去放在...

weixin_29008691的博客 398

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Android Framework学习(七)之Thread类以及常用同步类

Thread类是Android为线程操作而做的一个封装。代码在Thread.cpp中,其中还封装了一些与线程同步相关的类,,本篇博客,我们一起学习Thread类以及常用同步类。Thread类Thread类的构造函数中的有一个canCallJava Thread.cppstatus_t Thread::run(const char* name, int32_tpriority, size_t sta

一个码农的博客 2740

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Android 系统(176)---Android多线程

Android-多线程 薛之涛 关注2018.07.02 23:12* 字数 2332 阅读 51评论 0喜欢 1一:线程相关概念聊多线程之前,我们先说一说线程,说线程之前,我们了解一下进程。1.什么是进程?        通俗的说:我们平日里打开的QQ,微信,简书,都是一个进程。进程是程序的一次动态执行过程,它需要经历从代码加载,代码执行到执行完毕的一个完整的过程,这个过程也是进程本身从产生,发...

zhangbijun1230的专栏 302

Android-Handle消息传递和线程通信

Android应用通常会涉及到多个线程的并发执行,通过Handler,在不同线程间发送消息和处理消息,实现线程间的通信,比如主线程和后台线程之间的通信。

L_2162的博客 1651

采用Thread.join()或CountDownLatch来实现线程间同步

对于在Android开发中进行多线程编程来说,线程同步是一个需要经常面对的问题。例如主线程创建了几个子线程来执行复杂的计算,要求所有的子线程执行完后返回结果给主线程,主线程才能继续后续的操作,此时就需要考虑线程同步了。我也是从阅读Android源码中关于相机的部分后才发现有两种方式可以比较容易的实现线程同步,下面一一讲解。 1.采用Thread.join()函数 在当前线程中调...

20386053 87

Android 网络请求(一):OkHttp3

本篇学习Android网络请求中最常用的okHttp

阿秋的Blog 561

黑马程序员--多线程笔记

------- android培训、java培训、期待与您交流! ----------一.创建线程 ***1.继承Thread Thread定义: 定义一个类,然后继承Thread, 格式:class 类名 extends Thread { //..定义方法 } 线程调用: //匿名对象调用; new 类名().start(); //对象调

zhaoyanbing的专栏 459

黑马程序员---线程总结

---------------------- android培训、java培训、期待与您交流! ---------------------- 一.线程的概念  1.什么是线程   线程是程序执行的一条路径, 一个进程中可以包含多条线程   多线程并发执行可以提高程序的效率, 可以同时完成多项工作  2.多线程的应用场景   极域同时共享屏幕给多个电脑   迅雷开启多条线程一起下载

子非鱼的专栏 625

黑马程序员----java线程

——- android培训、java培训、期待与您交流! ———- 进程是指一个内存中运行的应用程序,每个进程都有自己独立的一块内存空间,一个进程中可以有多个线程。比如在Windows系统中,一个运行的xx.exe就是一个进程。 线程是指进程中的一个执行任务(控制单元),一个进程中可以运行多个线程,多个线程可共享数据。 多进程:操作系统中同时运行的多个程序; 多线程:在同一个进程中同时运行

Xia.WT的java学习笔记 464

线程androidAndroid ConditionVariable的用法

查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧! 在Android开辟中,如果需要线程同步,可以使用Java系统库的wait()和notify()...但是这些代码的编写比拟麻烦。Android提供了一个ConditionVariable类便利线程同步操作。 ConditionVariable有三个方法,分别是b...

weixin_30838921的博客 102

线程总结(适合初学者)

线程1. 进程(Process)进程通常可以理解为正在运行的程序,有自己独立的内存空间,有操作系统负责分配资源,例如:CPU的调度。多个进程可以并发执行。对于单个CPU,并发从宏观上理解是在同时执行,但是在微观上是顺序执行。2. 线程(Thread)线程是进程中的一个顺序执行流(一个线程执行多个任务时,这多个任务是顺序执行的),一个进程可以启动多个线程,多个线程可...

weixin_34199335的博客 152

Android线程安全-ReentrantLock

ReentrantLock是Java层(java.util.concurrent.locks)提供的一个锁机制,ReentrantLock主要保证两大特性:原子性、可见性可重入、支持公平锁/非公平锁、手动管理锁获取/锁释放、支持多种锁获取方式(lock()、tryLock(无参)、tryLock(有参)、lockInterruptibly())基于 AQS(AbstractQueuedSynchronizer)维护的:CLH队列(双向队列)和 CAS竞锁 实现的 4.2 tryLock() 4.

u013126431的博客 345

黑马程序员——学习日志7多线程

1、多线程 进程:一个正在执行中的程序,每一个进程执行都有一个执行顺序,该顺序是 一个执行路径,或叫一个控制单元。 线程:进程序中的一个独立的控制单元,线程控制着进程的执行。一个进程至少有一个线程。 JVM启动时有一个进程java.exe,该进程至少有一个线程负责java程序的执行,这个线程运行的代码存在于main方法中,该线程叫主线程。 JVM启动时,还有一个负责垃圾回心机制的线程。

pslichao的专栏 516

android 进程的创建线程数,【基础知识】多线程与多进程

[TOC]# RPC是什么RPC即Remote Procedure Call(远程过程调用)是一种计算机通信协议,为我们定义了计算机C中的程序如何调用另外一台计算机S的程序,让程序员不需要操心底层网络协议,使得开发包括网络分布式多程序在内的应用程序更加容易。RPC 是典型的**Client/Server 模式**,由客户端对服务器发出若干请求,服务器收到后根据客户端提供的参数进行操作,然后将执行结...

weixin_39556474的博客 280
上一篇: Android-Runnable接口实现多线程
下一篇: Android-实现Runnable和继承Thread区别
Android_xi
博客等级 码龄8年 4粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值