Git提交出现error: src refspec master does not match any的问题
在本地与远程分别新建了一个仓库并且关联后,想要把本地的文件提交到github上面,
输入下方命令后没有成功,而是出现了报错:error: src refspec master does not match any
git push -u origin master
原因,此时提交所在的分支是一个空目录,没有任何内容所以无法完成提交,所以应该先将待提交的内容添加到仓库并且提交以后再推到远程仓库,即
git add .
git commit -m "XXX"
git push -u origin master
什么是原子类,有什么作用?
不可分割性,一个操作是不可中断的,即便是多线程的情况下也可以保证。Java当中java.util.concurrent.atomic包下的都是具有原子特性的类。
原子类的作用和锁是类似的,都是为了保证并发情况下线程安全。不过原子类相比于锁,有一定的优势:
锁粒度更细:原子变量可以把竞争范围缩小到变量级别,这是我们可以获得的最细粒度的情况了,通常锁的粒度都要大于原子变量的粒度。锁的粒度小就不会锁住无用代码,可以提高并发效率。
效率更高:通常,使用原子类的效率会比使用锁的效率更高,除非是高度竞争的情况下。所以需要根据场景进行选择。
6类原子类纵览
Atomic*基本类型原子类
AtomicInteger、AtomicLong、AtomicBoolean
Atomic*Array数组类型原子类
AtomicIntegerArray、AtomicLongArray、AtomicReferenceArray
Atomic*Reference引用类型原子类
AtomicReference、AtomicStampedReference、AtomicMarkableReference
Atomic*FieldUpdater升级类型原子类
可以把一个不具备原子性的普通变量升级为原子性的。
AtomicIntegerFieldUpdater、AtomicLongFieldUpdater、AtomicReferenceFieldUpdater
Adder累加器
累加效果很好
LongAdder、DoubleAdder
Accumulator累加器
在Adder上又增加了一些额外的功能,只是用到的并不多。
LongAccumulator、DoubleAccumulator
Atomic*基本类型原子类 ,以AtomicInteger为例
其实是对int或者Integer类型的一个封装,封装以后提供了原子的访问和更新操作,原理是基于CAS算法。
常用方法:
public final int get()//获取当前值
public final int getAndSet(int newValue)//获取当前值并设置新的值
public final int getAndIncrement()//获取当前值并自增
public final int getAndDecrement()//获取当前值并自减
public final int getAndAdd(int delta)//获取当前值,并且加上预期的值
public final boolean compareAndSet(int expectedValue, int newValue) //如果当前的数值等于预期值,就以原子方式将这个值设置为新值(newValue),否则就不操作
AtomicArray数组类型原子类
Atomic*Reference引用类型原子类
AtomicReference:AtomicReference类的作用,和AtomicInteger并没有本质区别,AtomicInteger可以让一个整数保证原子性,而AtomicInteger可以让一个对象保证原子性,当然,AtomicReference的功能明显比AtomicInteger强,因为一个对象里可以包含很多属性。用法和AtomicInteger类似。
AtomicReference在自旋锁的应用:
public class AtomicReference<V> implements java.io.Serializable {
private static final VarHandle VALUE;
//省略
public final boolean compareAndSet(V expectedValue, V newValue) {
return VALUE.compareAndSet(this, expectedValue, newValue);
}
}
public abstract class VarHandle {
public final native
@MethodHandle.PolymorphicSignature
@HotSpotIntrinsicCandidate
boolean compareAndSet(Object... args);
}
把普通变量升级为原子类:用AtomicIntegerFieldUpdater升级原有变量
辅助自己的一个普通变量,让他也能够具有原子性。
使用场景:当我们大多数情况下需要的是一个普通类型,只有少数情况下,偶尔需要一个原子get-set操作。毕竟原子的消耗还是比普通类型要大的。
关于这个工具的使用:
public class Candidate {
volatile int score;
}
AtomicIntegerFieldUpdater<Candidate> scoreUpdater = AtomicIntegerFieldUpdater
.newUpdater(Candidate.class, "score");//传入对应的类名和要升级的变量名
scoreUpdater.getAndIncrement(tom);//进行相应的原子操作,例如自增
AtomicIntegerFieldUpdater注意点:
可见范围
背后的原理利用了反射,被升级的变量需要具有可见性,而如果是被private修饰,这个操作就不能成功。
不支持static
被升级变量不支持被static修饰,否则会报IllegalArgumentException异常。
Adder累加器
Adder累加器是在Java8引入的,相对而言是个较新的类。高并发下LongAdder比AtomicLong效率高,不过本质是空间换时间。竞争激烈的时候,LongAdder把不同线程对应到不同的Cell(一个内部结构)上进行修改,降低冲突的概率,是多段锁的理念,提高了并发性。
使用效果:假如说多线程情况下AtomicLong被多个线程累加,每一次加法,都要flush和refresh,很耗费资源。因为在AtomicLong当中为了保持多核之间的数据一致性,每次操作完会把数据刷回主内存,同样每次由从主内存中读取,进行一个间接通信,所以会慢一些。 在内部,LongAdder的实现原理和AtomicLong是不同的,AtomicLong每一次加法都需要做同步,所以在高并发的时候导致冲突比较多,也就降低了效率。而LongAdder,每个线程都会有一个自己的计数器,仅仅用来在自己的线程中计数,这样一来就不会被其他线程的计数器干扰,不同线程的操作之间不存在竞争关系,所以在加和的过程中,根本不需要同步机制,也不需要flush和refresh,没有一个统一的counter来给所有线程统一计数。
LongAdder的改进原理:
LongAdder引入了分段累加的概念,内部有一个base变量和一个Cell[]数组共同参与计数,竞争不激烈时,直接累加到base变量上;竞争激烈时,各个线程分散累加到自己的槽Cell[i]中,通过计算哈希值给每个线程分配不同的Cell,每个Cell都是一个独立的计数器,这样就不会和其他线程产生干扰了,Cell之间也不存在任何的竞争关系,所以操作中就大大降低了flush和refresh操作,这就是LongAdder吞吐量大的原因,空间换时间。
参考文章:LongAdder解析
适用场景:
在低争用情况下,AtomicLong和LongAdder两个类具有类似的特征。但是在竞争激烈的情况下,LongAdder的预期吞吐量要高得多,但是同时也消耗更多空间。LongAdder适合的场景是统计求和和计数的场景,而且LongAdder基本只提供了add方法,而AtomicLong还具有cas方法。
Accumulator累加器
Accumulator和Adder非常相似,Accumulator就是一个更通用版本的Adder。
Git提交出现error: src refspec master does not match any的问题的更多相关文章
- Git:错误:error:src refspec master does not match any
新建立了一个远程仓库,想着把项目放上去.于是在项目目录上: git init 然后就添加远程库 git remote add origin xxxx.git 然后就想push: git push -u ...
- GIT问题,error:src refspec master does not match any
将本地GIT版本库PUSH到一个GITHUB上一个空的版本库时可能会出现如下错误error:src refspec master does not match any原因: 本地版本库为空, 空目录不 ...
- git push 失败出现error: src refspec master does not match any.解决方案
今天写好一个demo往GitHub上传时报错 错误提示: error: src refspec master does not match any. error: failed to push som ...
- git push 时发生错误 error: src refspec master does not match any. error: failed to push some refs to
很多相关解决办法都是最后要 push 到远端的 master 上,但很多其实要求不能把个人的修改内容直接 push 到 master 主分支. 因此,当我想将本地 feature/work1 分支的修 ...
- github上传时出现error: src refspec master does not match any解决办法
github上传时出现error: src refspec master does not match any解决办法 这个问题,我之前也遇到过,这次又遇到了只是时间间隔比较长了,为了防止以后再遇到类 ...
- error: src refspec master does not match any. 错误处理办法
自从上次学了git之后,很少用.今天在使用 本地仓库使用如下命令初始化: $ git init 之后使用如下命令添加远程库: $ git remote add origin git@github.co ...
- github上传时出现error: src refspec master does not match any解决办法22
1 error:src refspec master does not match any这个问题,我之前也遇到过,这次又遇到了只是时间间隔比较长了,为了防止以后再遇到类似问题,还是把这个方法简单记录 ...
- error: src refspec master does not match any.
执行下面的命令,git push 时候出错: git push origin master 出现如下错误: error: src refspec master does not match any. ...
- 使用 Git 报错 error: src refspec master matches more than one.
今天在使用 Git push 代码时遇到一个报错: error: src refspec master matches more than one. error: failed to push som ...
随机推荐
- Python 中的else
在其他程序语言中,else 似乎只是与 if 关键字有缘分.而与其他的关键字没有联系,不能搭配使用,而在python中,else 除了与 if 匹配外, 还可以与for.while/ try等关键字匹 ...
- js面试代码中的“坑”
1.typeof 对类型的判断 (function() { return typeof arguments; } )(); 答案:"Object" 解释:arguments是一个伪 ...
- 用java实现输出英文小说飘中出现次数最多的前N个单词(附:使用文件读写)
本文参考于:https://blog.csdn.net/u014204432/article/details/40348839 一.题目 输出单个文件(<飘> 英文版)中的前 N 个最常出 ...
- 重大消息:华为笔记本电脑开始用LINUX系统
对华为而言,此举不失为一个明智的抉择.在手机操作系统领域,目前已被苹果的IOS系统和谷歌的安卓系统垄断.而IOS系统是封闭式,只为苹果手机使用:安卓是开放性,当谷歌与华为停止合作后.华为手机将无法使用 ...
- 用绿色版TOMCAT和绿色版JDK安装一个WEB服务器
(1) 使用绿色版本JDK,解压到一个目录上D:\jdk1.6. (2) 使用绿色版本Tomcat,解压到另一个目录上D:\jdk1.6\tomcat5.5 只要在bat文件D:\tomcat5. ...
- python默认参数问题
我们在定义默认参数时,有时会遇到一写似乎难以理解的问题.比如,在第二次调用函数时,默认参数记住了上一次执行的结果: >>> def test(L=[3,]): ... L.appen ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:"text-muted" 类的文本样式
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- LeetCode242 有效的字母异位词(Java字符数组排序&自定义排序记录)
题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词. 示例 1: 输入: s = "anagram", t = "nagaram& ...
- ModelSim安装步骤
刚成功安装了软件的我反手就是一篇安装步骤分享. 这是我自己创建的永久百度云链接. ModelSim10.7软件下载百度云链接 网址:https://pan.baidu.com/s/14oGZytocA ...
- 单片机ADC检测4-20mA电路,以及计算方法
单片机ADC检测4-20mA电路,以及计算方法 转载:https://www.hongchangzidonghua.com/?id=24 1,手里有一个4-20mA输出的压力传感器,假设测量范围是0M ...