Moved BuyListTaskManager product restock to a separate task.

This commit is contained in:
MobiusDevelopment 2021-02-02 14:57:21 +00:00
parent 5c4787386a
commit 860260764d
19 changed files with 703 additions and 95 deletions

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)

View File

@ -16,6 +16,8 @@
*/
package org.l2jmobius.gameserver.taskmanager;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
@ -29,17 +31,19 @@ import org.l2jmobius.gameserver.model.buylist.Product;
public class BuyListTaskManager
{
private static final Map<Product, Long> PRODUCTS = new ConcurrentHashMap<>();
private static boolean _working = false;
private static final List<Product> PENDING_UPDATES = new ArrayList<>();
private static boolean _workingProducts = false;
private static boolean _workingSaves = false;
public BuyListTaskManager()
{
ThreadPool.scheduleAtFixedRate(() ->
{
if (_working)
if (_workingProducts)
{
return;
}
_working = true;
_workingProducts = true;
final long currentTime = System.currentTimeMillis();
for (Entry<Product, Long> entry : PRODUCTS.entrySet())
@ -48,12 +52,40 @@ public class BuyListTaskManager
{
final Product product = entry.getKey();
PRODUCTS.remove(product);
product.restock();
synchronized (PENDING_UPDATES)
{
if (!PENDING_UPDATES.contains(product))
{
PENDING_UPDATES.add(product);
}
}
}
}
_working = false;
_workingProducts = false;
}, 1000, 60000);
ThreadPool.scheduleAtFixedRate(() ->
{
if (_workingSaves)
{
return;
}
_workingSaves = true;
if (!PENDING_UPDATES.isEmpty())
{
final Product product;
synchronized (PENDING_UPDATES)
{
product = PENDING_UPDATES.get(0);
PENDING_UPDATES.remove(product);
}
product.restock();
}
_workingSaves = false;
}, 50, 50);
}
public void add(Product product, long endTime)