Skip to content

Instantly share code, notes, and snippets.

View iaveryanov's full-sized avatar

Ivan Averyanov iaveryanov

View GitHub Profile
private boolean decTillZero(AtomicLong counter) {
while (true) {
long current = counter.get();
if (current == 0) {
return false;
}
long next = current - 1;
if (counter.compareAndSet(current, next)) {
return true;
}
/**
* Atomically adds the given value to the current value.
*
* @param delta the value to add
* @return the previous value
*/
public final long getAndAdd(long delta) {
while (true) {
long current = get();
long next = current + delta;
package ru.inlinetelecom.vn2.util;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
/**
* вариант с uncontended lock (getAvailableProcessors >= worker_count
@iaveryanov
iaveryanov / AtomicCasTester.java
Created April 3, 2014 12:37
How much idling?
package ru.inlinetelecom.vn2.util;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
/**
* вариант с uncontended lock (getAvailableProcessors >= worker_count
@iaveryanov
iaveryanov / InterfaceJava8.java
Created April 10, 2014 10:41
Main in interface
package ru;
public interface InterfaceJava8 {
public static void main(String[] args) {
System.out.println("Hello from interface! It is java 8!");
}
}
@iaveryanov
iaveryanov / Forrest.java
Created April 17, 2014 15:02
lambda pazzle
package lambda.puzzle;
// source: http://arhipov.blogspot.ru/2014/02/java-8-lambdas-unintentional-puzzle.html
public class Forrest {
public Runnable wrooom(){
return () -> { System.out.println("Hello, lambda!"); };
}
public static void main(String[] args) {
Runnable runnable = new Forrest().wrooom();
@iaveryanov
iaveryanov / Forrest.java
Last active August 29, 2015 14:00
Puzzle solution.
package ru;
// origin source: http://arhipov.blogspot.ru/2014/02/java-8-lambdas-unintentional-puzzle.html
// my gist with puzzle https://gist.github.com/iaveryanov/10990181
public class Forrest {
public Runnable wrooom(){
return new Runnable() {
@Override
public void run() {
System.out.println("Hello, lambda!");
package ru.int_overflow;
public class IntOverflowPuzzle {
// todo почему при использовании long разница в 1000 раз, действительно на столько медленнее
// todo почему при переполнении разница во времени в 1000 раз
private static void doOperation() {
// change type to long
//
// results:
package ru.int_overflow;
import org.openjdk.jmh.annotations.*;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import java.util.concurrent.TimeUnit;
@iaveryanov
iaveryanov / Utils.java
Created December 19, 2012 11:50
java: util methods
public final class Utils {
private Utils() {
}
public static void echo(String msg) {
System.out.println(msg);
}
public static void sleep(int millis) {