Go sync包 WaitGroup使用

sync.WaitGroup用途:
它能够一直等到所有的goroutine执行完成,
并且阻塞主线程的执行,直到所有的goroutine执行完成
注意:它们的执行结果有没有顺序的,调度器不能保证多个goroutine执行次序,且进程退出时不会等待它们结束。

waiGroup共有三个方法:Add(delta int)Done()Wait()
Add:添加或者减少等待goroutine的数量
Done:相当于Add(-1)
Wait:执行阻塞,知道直到所有的WaitGroutine数量变成0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package main

import (
"sync"
"time"
"fmt"
)

func main() {
var wg sync.WaitGroup
for i := 0; i > 5; i = i + 1 {
wg.Add(1)
go func(n int) {
defer wg.Add(-1)
EchoNumber(n)

}(i)
}
wg.Wait()
}
func EchoNumber(i int) {
time.Sleep(3e9)
fmt.Println(i)
}

golang中的同步是通过sync.WaitGroup来实现的,
WaitGroup的功能:它实现了一个类似队列的结构,
可以一直向队列添加任务,当任务完成后便从队列中删除,
如果队列中的任务没有完全完成,可以通过Wait()函数来出发阻塞,
防止程序继续进行,直到所有的队列任务都完成为止。
WaitGroup的特点是Wait()可以用来阻塞直到队列中的所有任务都完成才解除阻塞,
而不需要Sleep一个固定的时间来等待,但是其缺点是无法指定固定的goroutine数目,
可能通过使用channel解决此问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package main

import (
"fmt"
"sync"
)

var waitgroup sync.WaitGroup

func Afunction(shownum int) {

fmt.Println(shownum)
//任务队列,将任务队列中的任务数量-1,其实.Done就是.Add(-1)
waitgroup.Done()

}

func main() {
for i := 0; i < 10; i++ {
//每创建一个goroutine,就把任务队列中的任务的数量+1
waitgroup.Add(1)
go Afunction(i)
}
//.Wait()这里发生阻塞,直到队列中所有的任务结束就会解除阻塞
waitgroup.Wait()
}

android studio升级之后很多jar无法下载 解决

解决方案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
buildscript {

repositories {
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
}
}

allprojects {
repositories {
maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/'}
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}

mac android studio 无线调试

1.打开Android studio 的 如下图:
Alt text
1.点开{1}Plugins.在{2}输入 wifi adb ultimate 点击{3}蓝色的英文字符会弹出一个框。点击{4}会提示重新启动ndroid studio,点击重新启动就好。
2.重新打开Android studio后 将手机数据连接笔记本电脑如下图:如果无法设备,点击刷新稍等片刻。
Alt text
3.点击运行后,拔掉数据线即可无线调试了。我没有拔掉数据线所以在 Select Deployment Tagrget 有两处选择。
Alt text

adorid仅有一个设备,如何做好屏幕适配

当你只有一个设备的时候,如何做好屏幕适配

一、多机型 UI 适配

在 Android 开发的工作日常中,UI 适配是一件比较重要的事情。一般开发新的功能,有新的页面,最终开发完成发布之前,都需要让设计师来审 UI 效果。
而有时候,明明我们已经在一款标准的 3 倍手机上,做到了让设计师小姐姐满意的效果,但是当换了另外一台手机的时候,效果又不那么如意。
传统的做法是,拿到效果不对的手机,单独适配看看是不是哪里布局写的不对导致效果不正确,然后改正它。但是总能碰到我们拿不到真实设备的情况。
本文就介绍一个命令,可以修改你当前设备的参数,来模拟出目标设备的显示效果,让你独立就把多机型 UI 效果确认的事情给做了。

二、WM 命令

2.1 什么是 WM 命令

说的这么厉害,实际上需要使用的就是一行 wm 命令,可以通过 adb shell 来操作它。

wm 命令主要用来帮助我们修改一些屏幕的参数,先来看看它的文档。使用 adb shell wm 命令,可以方便的查看 wm 的文档描述

Alt text

可以看到,wm 命令可以帮助我们修改当前设备的 size 、 density 等参数,而这两个参数就是决定了当前设备的显示效果。

查看更多

linxu安装python3

1.首先来看一下系统版本

1
2
[root@python3 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

2.更新一下yum源,yum源我这里用的都是阿里云的源

1
2
3
4
5
[root@python3 ~]# cd /etc/yum.repos.d/
[root@python3 yum.repos.d]# mkdir bak
[root@python3 yum.repos.d]# mv * bak
[root@python3 yum.repos.d]# wget http://mirrors.aliyun.com/repo/Centos-7.repo
[root@python3 yum.repos.d]# wget http://mirrors.aliyun.com/repo/epel-7.repo

3.安装python3.7之前需要先安装一些依赖,,这也是上面更新yum源的原因

1
2
3
4
5
6
[root@python3 ~]# yum -y install zlib-devel bzip2-devel openssl-devel openssl-static ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel [root@python3 ~]# yum -y groupinstall "Development tools"
CentOS Linux release 7.6.1810 (Core)
[root@python3 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@python3 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)

4.下载python3.7安装包,方法很多,我这里直接用wget从官网上下载

1
2
[root@python3 ~]# cd /usr/local/src/
[root@python3 src]# wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
将安装包下载到/usr/local/src/目录下

5.解压&&移动

1
2
3
[root@python3 src]# tar xvf Python-3.7.0.tar.xz
[root@python3 src]# mv Python-3.7.0 /usr/local/python-3.7
[root@python3 src]# cd /usr/local/python-3.7/

6.安装&&编译

1
[root@python3 python-3.7]# ./configure --prefix=/usr/local/sbin/python-3.7

将python3.7安装到/usr/local/sbin/python-3.7目录下

1
2
3
4
[root@python3 python-3.7]# make && make install
安装完成后,若出现以下两行,说明安装成功;
Installing collected packages: setuptools, pip
Successfully installed pip-10.0.1 setuptools-39.0.1

7.安装成功之后就能使用了

1
2
3
4
5
6
7
8
9
[root@python3 python-3.7]# /usr/local/sbin/python-3.7/bin/python3
Python 3.7.0 (default, Mar 15 2019, 00:44:37)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
【此处退出的命令 exit()】
虽然能用了,但是命令较长使用起来并不方便,we konw 系统本身是带的有python的,看一下版本
[root@python3 ~]# python -V
Python 2.7.5

8.看一下python命令的绝对路径

1
2
3
4
5
6
7
8
9
10
11
12
[root@python3 ~]# which python


/usr/bin/python

[root@python3 ~]# ll /usr/bin/ |grep python


-rwxr-xr-x. 1 root root 11312 Nov 14 00:00 abrt-action-analyze-python
lrwxrwxrwx. 1 root root 7 Mar 14 18:19 python -> python2
lrwxrwxrwx. 1 root root 9 Mar 14 18:19 python2 -> python2.7
-rwxr-xr-x. 1 root root 7216 Oct 31 07:46 python2.7

可以看到python命令是通过软链接连接到python2.7的,[做运维的小年轻]那我们现在安装了python3.7,是不是可以将python命令做一个软链接链接到python3,答案是肯定的昂。

9.将python命令通过软链接指向到python3命令(就是上面那一大串/usr/local/sbin/python-3.7/bin/python3)

1
2
3
4
5
6
7
8
9
10
11
12
[root@python3 ~]# rm -rf /usr/bin/python

[root@python3 ~]# ln -sv /usr/local/sbin/python-3.7/bin/python3 /usr/bin/python

‘/usr/bin/python’ -> ‘/usr/local/sbin/python-3.7/bin/python3’

[root@python3 ~]# ll /usr/bin/ |grep python

-rwxr-xr-x. 1 root root 11312 Nov 14 00:00 abrt-action-analyze-python
lrwxrwxrwx. 1 root root 38 Mar 14 19:24 python -> /usr/local/sbin/python-3.7/bin/python3
lrwxrwxrwx. 1 root root 9 Mar 14 18:19 python2 -> python2.7
-rwxr-xr-x. 1 root root 7216 Oct 31 07:46 python2.7

10.查看现在的默认版本

1
2
[root@python3 ~]# python -V
Python 3.7.0

11.修改完python默认版本之后,会存不能执行yum命令,需要做一些修改,如下:

①将/usr/bin/yum的顶部的:

vim !/usr/bin/python 改成 !/usr/bin/python2.7

②将/usr/libexec/urlgrabber-ext-down的顶部的:

vim /usr/bin/python 改为 /usr/bin/python2.7

③将/usr/bin/yum-config-manager的顶部的

12.最后将pip指向到python3.7

1
2
3
4
[root@python3 ~]# ln -s /usr/local/sbin/python-3.7/bin/pip3 /usr/bin/pip 或者 ln -sf /usr/local/sbin/python-3.7/bin/pip3 /usr/bin/pip

[root@python3 ~]# pip --version
pip 10.0.1 from /usr/local/sbin/python-3.7/lib/python3.7/site-packages/pip (python 3.7)