Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Листинг 1 показывает вызов и того, и другого.
здоровые головой люди стараются не делать синхронизацию по объектам, доступным извне.
Создание synchronized-блока выдало 16 строк байт-кода, тогда как synchronized-метода – только 5.
public static void normal(); Code: 0: getstatic #2; //Field test:I 3: iconst_1 4: iadd 5: putstatic #2; //Field test:I 8: return public static synchronized void blocking(); Code: 0: getstatic #2; //Field test:I 3: iconst_1 4: iadd 5: putstatic #2; //Field test:I 8: return public static void main(java.lang.String[]); Code: 0: invokestatic #3; //Method normal:()V 3: invokestatic #4; //Method blocking:()V 6: return
public void setWhatImReading( Book whatImReading )
{
//this.whatImReading = whatImReading;
for(;;){
if(updater.compareAndSet( this, this.whatImReading, whatImReading)) return;
}
}
java -Xcomp -XX:CompileOnly=SynchronizationExample.synchronizedMethodGet -XX:CompileOnly=SynchronizationExample.synchronizedBlockGet -XX:+PrintCompilation -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly SynchronizationExample
5 вещей, которых вы не знали о многопоточности