sto sviluppando il trasformatore per Java 6 * 1) che esegue una sorta di valutazione parziale Ma consideriamo, per semplicità, astratto-sintassi-albero interpretazione di un programma Java.Qual è il modo migliore per simulare java.lang.Thread?
Come simulare il comportamento di Thread
da un programma interpretato?
Al momento ho in mente quanto segue:
AstInterpreter dovrebbero attuare java.lang.Runnable
. Dovrebbe anche riscrivere ogni nuova istanza espressione del java.lang.Thread
(o la sua sottoclasse) sostituendo porta s' il Thread
(java.lang.Runnable
) con la nuova istanza AstInterpreter:
EDIT: esempi più complessi disponibile.
EDIT 2: osservazione programma 1.
cliente:
class PrintDemo {
public void printCount(){
try {
for(int i = 5; i > 0; i--) {
System.out.println("Counter --- " + i);
}
} catch (Exception e) {
System.out.println("Thread interrupted.");
}
}
}
class ThreadDemo extends Thread {
private Thread t;
private String threadName;
PrintDemo PD;
ThreadDemo(String name, PrintDemo pd){
threadName = name;
PD = pd;
}
public void run() {
synchronized(PD) {
PD.printCount();
}
System.out.println("Thread " + threadName + " exiting.");
}
public void start()
{
System.out.println("Starting " + threadName);
if (t == null)
{
t = new Thread (this, threadName);
t.start();
}
}
}
public class TestThread {
public static void main(String args[]) {
PrintDemo PD = new PrintDemo();
ThreadDemo T1 = new ThreadDemo("Thread - 1 ", PD);
ThreadDemo T2 = new ThreadDemo("Thread - 2 ", PD);
T1.start();
T2.start();
// wait for threads to end
try {
T1.join();
T2.join();
} catch(Exception e) {
System.out.println("Interrupted");
}
}
}
programma 1 (ThreadTest - bytecode interpretato):
new Thread(new Runnable() {
public void run(){
ThreadTest.main(new String[0]);
}
});
programma 2 (ThreadTest - AST interpretato):
final com.sun.source.tree.Tree tree = parse("ThreadTest.java");
new Thread(new AstInterpreter() {
public void run(){
interpret(tree);
}
public void interpret(com.sun.source.tree.Tree javaExpression){
//...
}
});
Condivide la risultante programma di 2 simulare il comportamento del thread del programma iniziale 1 correttamente?
1) Attualmente, lo schema source=8/target=8
è accettato.
Sì, è possibile scrivere la propria classe che implementa Runnable e quella Runnable può essere eseguita all'interno di una discussione.Non riesco a vedere cosa fa la tua classe AstInterpreter che un nuovo Runnable non può fare. –
perché stai usando Java 6? Non c'è ragione. Tutto il tuo codice "Java 6" verrà eseguito, non modificato, su Java 7 e 8. – SnakeDoc
In effetti sto utilizzando java 6. Ho un trasformatore limitato dalle funzionalità di java 6 e quindi obbligato a usare sdk6 a causa dell'API di langtools. –