Ⅰ 多线程中使用lock后是不是和单线程一样
对的,因为加入lock后只有等待这个方法执行完成后才能执行下一个如果你多线程中都使用到了同一个方法那么此方法将进入排队状态
Ⅱ 安卓在多线程编程中怎样保证线程安全
1.将整个类加锁 (代码为synchronized(this))
2.定义一个object,访问某些相关变量是,对该对象加锁(代码为synchronized(lockobj))。
新应用发布前如条件允许,最好做一下代码混淆,市面上各种外挂或者篡改数据什么的也比较常见,避免被破解利用。可以在一定程度上保护自己核心代码算法,提高破解/盗版/二次打包的难度,缓解代码注入/动态调试/内存注入攻击等
但也对应用的兼容性有一定影响,加壳技术不行的话,还会影响程序运行效率.
目前市面上有很多第三方加壳的平台, 如果应用需要加壳要选择的话,可以先试试免费的,例如腾讯御安全,建议先去加固个包测试下兼容性。
Ⅲ android.permission.wake_lock 唤醒锁定 允许程序在手机屏幕关闭后后台
写一个监听器放进service里,不要放在主线程
Ⅳ android 怎么处理线程安全
UI线程及Android的单线程模型原则当应用启动,系统会创建一个主线程(main thread)。这个主线程负责向UI组件分发事件(包括绘制事件),也是在这个主线程里,应用和Android的UI组件(components from the Android UI toolkit (components from the android.widget and android.view packages))发生交互。 当App做一些比较重(intensive)的工作的时候,除非合理地实现,否则单线程模型的performance会很poor。特别的是,如果所有的工作都在UI线程,做一些比较耗时的工作比如访问网络或者数据库查询,都会阻塞UI线程,导致事件停止分发(包括绘制事件)。对于用户来说,应用看起来像是卡住了,更坏的情况是,如果UI线程blocked的时间太长(大约超过5秒),用户就会看到ANR(application not responding)的对话框。 另外,Andoid UI toolkit并不是线程安全的,所以不能从非UI线程来操纵UI组件。必须把所有的UI操作放在UI线程里,所以Android的单线程模型有两条原则: 1.不要阻塞UI线程。 2.不要在UI线程之外访问Android UI toolkit(主要是这两个包中的组件:android.widget and android.view)。
Ⅳ android 强行关闭线程
这个好办,这里有两个线程吧,线程A
线程mSender。
设:让线程A,监视线程mSender
第一步:
在A中定义一个变量:ExecutorService
transThread
=
Executors.newSingleThreadExecutor();
解释:transThread
官方名称是“单一线程池变量”,他是做什么的呢,它就像我们给A的一块赛车场,用来玩遥控赛车。
第二步:
在A中再定义一个变量:
Future
transPending;
解释:transPending就像我给A一个用来控制遥控赛车的遥控器一样
第三步:
在A中定义个线程mSender对象:
private
final
Runnable
mSender
=
new
Runnable()
{
public
void
run()
{
}};
解释:这是你写的对象,他就相当于我给A的一个遥控赛车。
第四步:
在A中添加如下语句:transPending
=
transThread.submit(mSender);
解释:这一步就相当于把赛车(mSender)放入场地(第一步中我们定义的transThread),并且用遥控器“transPending”来控制他。
(注:这里你是否会有疑惑,我没有写"mSender.start()"之类的语句怎么让我的赛车跑起来啊(运行run()方法),放心,有了“transPending
=
transThread.submit(mSender);”这一步,赛车是自动跑起来的,也就是mSender会自动调用run的。)
第五步:
现在你可以用遥控器“transPending”干很多事情了
transPending.cancel(true);无论线程现在是否运行中,立刻终止。
transPending.cancel(false);当前线程若没有运行(比如挂起状态)就终止它。
transPending所做的不止这些。
Ⅵ android中,一个类里边有两个方法,比如A和B,线在有多个线程,都可以随机的调用A或B,如何实现同步
public static void main(String[] args) {
S s = new S();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
s.A();
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
s.B();
}
}
});
t1.start();
t2.start();
}
public static class S {
public Object locka = new Object(), lockb = new Object();
public void A() {
synchronized (lockb) {
synchronized (locka) {
System.out.println("A");
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
locka.notify();
}
lockb.notify();
}
}
public void B() {
synchronized (locka) {
synchronized (lockb) {
System.out.println("B");
try {
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
lockb.notify();
}
locka.notify();
}
}
}
Ⅶ 线程锁的原理是什么
线程锁的原理:当对象获取锁时,它首先使自己的高速缓存无效,这样就可以保证直接从主内存中装入变量。
同样,在对象释放锁之前,它会刷新其高速缓存,强制使已做的任何更改都出现在主内存中。 这样,会保证在同一个锁上同步的两个线程看到在 synchronized 块内修改的变量的相同值。
一般来说,线程以某种不必让其他线程立即可以看到的方式(不管这些线程在寄存器中、在处理器特定的缓存中,还是通过指令重排或者其他编译器优化),不受缓存变量值的约束。
线程锁在run()函数中使用QMutex实现同步,当多个线程访问共享变量时,使用lock/trylock和unlock将共享变量包裹,以保证同步访问共享变量。
如果不加锁将会在2秒后同时修改num变量,将会导致线程不按照我们的想法执行,当前线程锁定后,其他线程如果遇到共享变量将会等待解锁;
使用QMutex上锁解锁时,当代码提前退出有可能并未执行unlock(),若其他线程采用lock上锁会一直被阻塞,导致内存溢出。
Ⅷ Android_lock怎么用
1 Android中提供了一个名为WakeLock的类在android.os.PowerManager.WakeLock中,从名字来看WakeLock是唤醒锁的意思,它可以控制屏幕的背光开关,所以在电源管理类。
WakeLock实例化方法比较简单,因为是系统的远程服务,通过下面的代码来构造
2 当然Android考虑到安全并不是说开发者有了权限,就可以随意的控制屏幕的背光显示或无,只有通过acquire点亮的背光才能使用release让其关闭背光,如果直接调用release方法关闭屏幕将会产生一个异常。
从Android
2.1 API Level7开始增加了一个判断屏幕是否处于点亮状态可以使用public boolean isScreenOn ()这个方法,代码为
而对于Android 2.2 API
Level为8时增加了一个reboot(),可以重启手机进入恢复模式,同时你需要申请权限
来实现,不过Android开发网不保证该方法在所有固件上有效,部分厂商考虑到安全并没有开发这个重启方法
Ⅸ 在多线程中使用lock需要注意哪些地方
多线程就象是人体一样,一直在并行的做许多工作,例如,人可以同时呼吸,血液循环,消化食物的。多线程可以将一个程序划分成多个任务,他们彼此独立的工作,以方便有效的使用处理器和用户的时间.这种比喻精辟,只要我们的机器资源够用,就要尽量提高程序的执行速度,这样能让用户感到舒服。线程同步的方法:wait():使一个线程处于等待状态,并且释放所持有的对象的lock。sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常。notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
Ⅹ Android中怎么让子线程执行完后在执行UI线程
你所说的是线程同步问题,给你提供三个思路:
1,使用同步监视器进行线程同步;
2,使用同步方法;
3,使用同步锁LOCK对方法进行加锁。
如果这三块不知道,建议先看看Java基础知识中的线程同步问题。