2020-05-30 11:07:08 +08:00

353 lines
12 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="zh">
<head>
<!-- Generated by javadoc (1.8.0_181) on Sat May 30 11:03:37 CST 2020 -->
<title>IdWorker</title>
<meta name="date" content="2020-05-30">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
try {
if (location.href.indexOf('is-external=true') == -1) {
parent.document.title="IdWorker";
}
}
catch(err) {
}
//-->
var methods = {"i0":9,"i1":9,"i2":10};
var tabs = {65535:["t0","所有方法"],1:["t1","静态方法"],2:["t2","实例方法"],8:["t4","具体方法"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>您的浏览器已禁用 JavaScript。</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="跳过导航链接">跳过导航链接</a></div>
<a name="navbar.top.firstrow">
<!-- -->
</a>
<ul class="navList" title="导航">
<li><a href="../../../../../overview-summary.html">概览</a></li>
<li><a href="package-summary.html">程序包</a></li>
<li class="navBarCell1Rev"></li>
<li><a href="class-use/IdWorker.html">使用</a></li>
<li><a href="package-tree.html"></a></li>
<li><a href="../../../../../deprecated-list.html">已过时</a></li>
<li><a href="../../../../../index-files/index-1.html">索引</a></li>
<li><a href="../../../../../help-doc.html">帮助</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../com/java2nb/novel/common/utils/HttpUtil.html" title="com.java2nb.novel.common.utils中的类"><span class="typeNameLink">上一个类</span></a></li>
<li><a href="../../../../../com/java2nb/novel/common/utils/IpUtil.html" title="com.java2nb.novel.common.utils中的类"><span class="typeNameLink">下一个类</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?com/java2nb/novel/common/utils/IdWorker.html" target="_top">框架</a></li>
<li><a href="IdWorker.html" target="_top">无框架</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">所有类</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_top");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>概要:&nbsp;</li>
<li>嵌套&nbsp;|&nbsp;</li>
<li>字段&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">构造器</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">方法</a></li>
</ul>
<ul class="subNavList">
<li>详细资料:&nbsp;</li>
<li>字段&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">构造器</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">方法</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!-- -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">com.java2nb.novel.common.utils</div>
<h2 title="类 IdWorker" class="title">类 IdWorker</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>com.java2nb.novel.common.utils.IdWorker</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">IdWorker</span>
extends java.lang.Object</pre>
<div class="block"><p>名称IdWorker.java</p>
<p>描述分布式自增长ID</p>
<pre>
Twitter的 Snowflake JAVA实现方案
</pre>
核心代码为其IdWorker这个类实现其原理结构如下我分别用一个0表示一位用—分割开部分的作用
1||0---0000000000 0000000000 0000000000 0000000000 0 --- 00000 ---00000 ---000000000000
在上面的字符串中第一位为未使用实际上也可作为long的符号位接下来的41位为毫秒级时间
然后5位datacenter标识位5位机器ID并不算标识符实际是为线程标识
然后12位该毫秒内的当前毫秒内的计数加起来刚好64位为一个Long型。
这样的好处是整体上按照时间自增排序并且整个分布式系统内不会产生ID碰撞由datacenter和机器ID作区分
并且效率较高经测试snowflake每秒能够产生26万ID左右完全满足需要。
<p>
64位ID (42(毫秒)+5(机器ID)+5(业务编码)+12(重复累加))</div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!-- -->
</a>
<h3>构造器概要</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="构造器概要表, 列表构造器和解释">
<caption><span>构造器</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">构造器和说明</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../com/java2nb/novel/common/utils/IdWorker.html#IdWorker--">IdWorker</a></span>()</code>&nbsp;</td>
</tr>
<tr class="rowColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../com/java2nb/novel/common/utils/IdWorker.html#IdWorker-long-long-">IdWorker</a></span>(long&nbsp;workerId,
long&nbsp;datacenterId)</code>&nbsp;</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!-- -->
</a>
<h3>方法概要</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="方法概要表, 列表方法和解释">
<caption><span id="t0" class="activeTableTab"><span>所有方法</span><span class="tabEnd">&nbsp;</span></span><span id="t1" class="tableTab"><span><a href="javascript:show(1);">静态方法</a></span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">实例方法</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">具体方法</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">限定符和类型</th>
<th class="colLast" scope="col">方法和说明</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>protected static long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/java2nb/novel/common/utils/IdWorker.html#getDatacenterId-long-">getDatacenterId</a></span>(long&nbsp;maxDatacenterId)</code>
<div class="block">
数据标识id部分
</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>protected static long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/java2nb/novel/common/utils/IdWorker.html#getMaxWorkerId-long-long-">getMaxWorkerId</a></span>(long&nbsp;datacenterId,
long&nbsp;maxWorkerId)</code>
<div class="block">
获取 maxWorkerId
</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>long</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../com/java2nb/novel/common/utils/IdWorker.html#nextId--">nextId</a></span>()</code>
<div class="block">获取下一个ID</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!-- -->
</a>
<h3>从类继承的方法&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!-- -->
</a>
<h3>构造器详细资料</h3>
<a name="IdWorker--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>IdWorker</h4>
<pre>public&nbsp;IdWorker()</pre>
</li>
</ul>
<a name="IdWorker-long-long-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>IdWorker</h4>
<pre>public&nbsp;IdWorker(long&nbsp;workerId,
long&nbsp;datacenterId)</pre>
<dl>
<dt><span class="paramLabel">参数:</span></dt>
<dd><code>workerId</code> - 工作机器ID</dd>
<dd><code>datacenterId</code> - 序列号</dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!-- -->
</a>
<h3>方法详细资料</h3>
<a name="nextId--">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>nextId</h4>
<pre>public&nbsp;long&nbsp;nextId()</pre>
<div class="block">获取下一个ID</div>
<dl>
<dt><span class="returnLabel">返回:</span></dt>
</dl>
</li>
</ul>
<a name="getMaxWorkerId-long-long-">
<!-- -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>getMaxWorkerId</h4>
<pre>protected static&nbsp;long&nbsp;getMaxWorkerId(long&nbsp;datacenterId,
long&nbsp;maxWorkerId)</pre>
<div class="block"><p>
获取 maxWorkerId
</p></div>
</li>
</ul>
<a name="getDatacenterId-long-">
<!-- -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>getDatacenterId</h4>
<pre>protected static&nbsp;long&nbsp;getDatacenterId(long&nbsp;maxDatacenterId)</pre>
<div class="block"><p>
数据标识id部分
</p></div>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!-- -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="跳过导航链接">跳过导航链接</a></div>
<a name="navbar.bottom.firstrow">
<!-- -->
</a>
<ul class="navList" title="导航">
<li><a href="../../../../../overview-summary.html">概览</a></li>
<li><a href="package-summary.html">程序包</a></li>
<li class="navBarCell1Rev"></li>
<li><a href="class-use/IdWorker.html">使用</a></li>
<li><a href="package-tree.html"></a></li>
<li><a href="../../../../../deprecated-list.html">已过时</a></li>
<li><a href="../../../../../index-files/index-1.html">索引</a></li>
<li><a href="../../../../../help-doc.html">帮助</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../com/java2nb/novel/common/utils/HttpUtil.html" title="com.java2nb.novel.common.utils中的类"><span class="typeNameLink">上一个类</span></a></li>
<li><a href="../../../../../com/java2nb/novel/common/utils/IpUtil.html" title="com.java2nb.novel.common.utils中的类"><span class="typeNameLink">下一个类</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?com/java2nb/novel/common/utils/IdWorker.html" target="_top">框架</a></li>
<li><a href="IdWorker.html" target="_top">无框架</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">所有类</a></li>
</ul>
<div>
<script type="text/javascript"><!--
allClassesLink = document.getElementById("allclasses_navbar_bottom");
if(window==top) {
allClassesLink.style.display = "block";
}
else {
allClassesLink.style.display = "none";
}
//-->
</script>
</div>
<div>
<ul class="subNavList">
<li>概要:&nbsp;</li>
<li>嵌套&nbsp;|&nbsp;</li>
<li>字段&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">构造器</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">方法</a></li>
</ul>
<ul class="subNavList">
<li>详细资料:&nbsp;</li>
<li>字段&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">构造器</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">方法</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!-- -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
</body>
</html>