/*
* Copyright ( C ) 2009 The Android Open Source Project
*
* Licensed under the Apache License , Version 2 . 0 ( the " License " ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an " AS IS " BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
*/
import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicLong;
/**
* Test for Jit regressions .
*/
public class Main {
public static void main(String args[]) throws Exception {
b17689750TestVolatile();
b17689750TestMonitor();
}
static void b17689750TestVolatile() {
final B17689750TestVolatile test = new B17689750TestVolatile();
new Thread () {
public void run() {
test.thread1();
}
}.start();
try {
test.thread2();
} catch (NullPointerException expected) {
System.out.println("b17689750TestVolatile passed." );
}
}
static void b17689750TestMonitor() {
final B17689750TestMonitor test = new B17689750TestMonitor();
new Thread () {
public void run() {
test.thread1();
}
}.start();
try {
test.thread2();
} catch (NullPointerException expected) {
System.out.println("b17689750TestMonitor passed." );
}
}
}
class B17689750TestVolatile {
private volatile int state = 0 ;
private int [] values = { 42 };
void thread1() {
while (state != 1 ) { } // Busy loop.
values = null ;
state = 2 ;
}
void thread2() {
int [] vs1 = values;
state = 1 ;
while (state != 2 ) { } // Busy loop.
int [] vs2 = values;
int v1 = vs1[0 ];
int v2 = vs2[0 ];
System.out.println("b17689750TestVolatile failed: " + v1 + ", " + v2);
}
}
class B17689750TestMonitor {
private int state = 0 ;
private Object lock = new Object();
private int [] values = { 42 };
void thread1() {
int s;
do {
synchronized (lock) {
s = state;
}
} while (s != 1 ); // Busy loop.
synchronized (lock) {
values = null ;
state = 2 ;
}
}
void thread2() {
int [] vs1;
synchronized (lock) {
vs1 = values;
state = 1 ;
}
int s;
do {
synchronized (lock) {
s = state;
}
} while (s != 2 ); // Busy loop.
int [] vs2 = values;
int v1 = vs1[0 ];
int v2 = vs2[0 ];
System.out.println("b17689750TestMonitor failed: " + v1 + ", " + v2);
}
}
Messung V0.5 in Prozent C=84 H=63 G=73
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-29)
¤
*© Formatika GbR, Deutschland