No1:

实现多线程的3中方法

1)继承Thread,重写run()方法

2)实现Runnable接口,并实现该接口的run()方法

3)实现Callable接口,重写call()方法

public class TestCallable{
//创建线程类
public static class MyTestCallable implements Callable{
public String call() throws Exception{
return "Hello World";
}
} public static void main(String[] args){
MyTestCallable mMyTestCallable = new MyTestCallable();
ExecutorService mExecutorService = Executors.newSingleThreadPool();
Future mfuture = mExecutorService.submit(mMyTestCallable);
tyr{
//等待线程结束,并返回结果
System.out.println(mfuture.get());
}catch(Exception e){
e.printStackTrace();
}
}
}

No2:

原子性:

对基本数据类型变量的读取和赋值是原子性操作,即这些操作是不可被中断的

x = 3;    //语句1
y = x; //语句2
x++; //语句3

只有语句1是原子性操作

语句2包含两个原子性操作:先读取x的值,再将x的值写入工作内存。合起来就不是原子性操作

语句3包含3个原子性操作:读取x的值,对x的值进行加1,向工作内存写入新值。

所以,一个语句含有多个操作时,就不是原子性操作

volatile不保证原子性

No3:

可见性:

线程之间的可见性,一个线程修改的状态对另一个线程是可见的。

当一个共享变量被volatile修饰时,它会保证修改的值立即被更新到主存,所以对其他线程是可见的。

No4:

有序性:

volatile、synchronized、Lock保证每个时刻只有一个线程执行同步代码,这相当于是让线程顺序执行同步代码,从而保证了有序性。

volatile禁止使用指令重排序

No5:

Android3.0版本之前的AsyncTask核心线程数是5个,允许创建的最大线程数为128,非核心线程空闲等待新任务的最长时间为1s。采用的阻塞队列是LinkedBlockingQueue,容量为10.

No6:

在Android3.0以上版本AsyncTask使用并行的线程处理

asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,"");

No7:

阻塞队列

阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只是从容器里拿元素

常见阻塞场景

1)当队列中没有数据的情况下,消费者端的所有线程会被自动阻塞(挂起),直到有数据放入队列

2)档队列中填满数据的情况下,生产者的所有线程都会被自动阻塞(挂起),直到队列中有空的位置,线程被自动唤醒

《Android进阶之光》--多线程编程的更多相关文章

  1. [置顶] 曙光到来,我的新书《Android进阶之光》已出版

    独立博客版本请点击这里 由来 2016年我开始建立了自己的知识体系,所有的文章都是围绕着这个体系来写,随着这个体系的慢慢成长,开始有很多出版社联系我写书,因为比较看好电子工业出版社,就顺理成章的开始了 ...

  2. 《Android进阶之光》--注解与依赖注入框架

    No1: 标准注解: 1)@Override:覆写 2)@Deprecated:过时 3)@SuppressWarnings:取消警告 4)@SafeVarargs:申明使用了可变长度参数的方法 No ...

  3. 《Android进阶之光》--Material Design

    接上篇<Android进阶之光>--Android新特性 No1: 组件: 1)底部工作条-Bottom Sheets 2)卡片-Cards 3)提示框-Dialogs 4)菜单-Menu ...

  4. Android中的多线程编程(一)附源代码

    Android中多线程编程:Handler类.Runnable类.Thread类之概念分析 1.Handler类: Handler是谷歌封装的一种机制:能够用来更新UI以及消息的发送和处理.Handl ...

  5. 《Android进阶之光》--网络编程与网络框架

    No1: Volley源码分析: Volley.newRequestQueue-> RequestQueue.start()-> CacheDispatcher.start()->C ...

  6. Android进阶(九)APP编程感想

    从初识Android到现在,在不断做APP(二维码.条形码扫描,彩票购买,火车票余票查询)的过程中,自己学会了很多东西.找时间整理了一下,总结如下: 其中,对于前两个APP,自己都是在他人已完成的基础 ...

  7. Android中的多线程编程

    问题 Android的UI也是线程不安全的,如果要更新应用程序里的UI元素,必须在主线程中进行,否则就会抛异常.比如用一个Button的onClick函数去更新界面上的元素,就会得到一个CalledF ...

  8. 《Android进阶之光》--Android新特性

    Android 5.0新特性 1)全新的Material Design设计风格 2)支持多种设备 3)全新的通知中心设计--按照优先级显示 4)支持64位ART虚拟机 5)多任务视窗Overview ...

  9. Android进阶之光-第1章-Android新特性-读书笔记

    第 1 章 Android 新特性 1.1 Android 5.0 新特性 1.1.1 Android 5.0 主要新特性 1. 全新的 Material Design 新风格 Material De ...

随机推荐

  1. tcp的连接断开

    tcp的断开连接是需要主机完成四次挥手的过程的,并不是断网了就表示断开连接了.假如双方已经建立起了连接,突然一方断网(比如突然停电,或者网线突然被拔了),对于另一方来讲他并不会知道这个情况,他依然认为 ...

  2. 转:Delphi中使用比较少的一些语法

    http://www.cnblogs.com/Murphieston/p/5577836.html 本文是为了加强记忆而写,这里写的大多数内容都是在编程的日常工作中使用频率不高的东西,但是又十分重要. ...

  3. 给bootstrap table设置行列单元格样式

    1.根据单元格或者行内其他单元格的内容,给该单元格设置一定的css样式 columns: [{ field: 'index', title: '序号', align:"center" ...

  4. script标签中type为"text/x-template"或"text/html"

    写过一点前端的都会碰到需要使用JS字符串拼接HTML元素然后append到页面DOM树上的情况,一般的写法都是使用+号以字符串的形式拼接,如果是短点的还好,如果很长很长的话就会拼接到令人崩溃了. 比如 ...

  5. Bootstrap模态框(一个页面显示多个)的使用

    在一个页面显示多个模态框时要讲每个模态框用div包裹起来,否咋会产生格式错误. <html> <head> <meta charset="utf-8" ...

  6. linux下mysql 5.7.22 安装

    二进制安装 1.下载https://dev.mysql.com/downloads/mysql/5.6.html#downloads 2.官方文档https://dev.mysql.com/doc/r ...

  7. llinux除了软连接本地文件夹同步:mount

    mount --bind /srv/dir1   /srv/dir2dir1:被共享的文件夹dir2:需要同步的文件夹

  8. Python创建、删除桌面、启动组快捷方式的例子分享

    一.Python创桌面建快捷方式的2个例子 例子一: 代码如下: import osimport pythoncomfrom win32com.shell import shell    from w ...

  9. select 不要 用*

    背景 说实在的,这有什么好记录的呢.记录这个有啥用,真是技术人员的吹毛求疵.说起来,就是给人装有用吧.既然记录了,也想个相关的段子吧.曾经有个同事写了个sql,效率极差,来了个女同事,竟然解决了,问题 ...

  10. Java基础98 gson插件的使用

    1.要用到的包 2.实例 实体类 people package com.shore.entity; /** * @author DSHORE/2019-4-21 * */ public class P ...