Я разрабатываю трансформатор для Java 6 * 1), который выполняет своего рода частичной оценки но давайте рассмотрим, для простоты, интерпретация абстрактно-синтаксисом дерево программы Java.Каков наилучший способ моделирования java.lang.Thread?
Как имитировать поведение Thread
интерпретируемой программой?
На данный момент я имею в виду следующее:
AstInterpreter должны осуществлять java.lang.Runnable
. Кроме того, следует переписывать каждое новое-экземпляра выражение java.lang.Thread
(или его подкласса) замена целевого показателя в Thread
«ы (java.lang.Runnable
) с новым экземпляром AstInterpreter:
EDIT: более сложные примеры предусмотрены.
EDIT 2: Замечание 1.
Целевая программа:
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");
}
}
}
Программа 1 (ThreadTest - байт-код интерпретируется):
new Thread(new Runnable() {
public void run(){
ThreadTest.main(new String[0]);
}
});
программа 2 (ThreadTest - АСТ интерпретированы):
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){
//...
}
});
Выполняет ли полученная в результате программа поведение нити исходной программы правильно?
1) В настоящее время схема принята source=8/target=8
.
Да, вы можете написать свой собственный класс, который реализует Runnable, и этот класс Runnable можно запустить внутри Thread.Я не вижу, что делает ваш класс AstInterpreter тем, что новый Runnable не может. –
Почему вы работаете на Java 6? Нет никаких причин. Весь ваш код «Java 6» будет работать без изменений на Java 7 и 8. – SnakeDoc
Я действительно работаю под Java. Я ограничил трансформатор функциями java 6 и, следовательно, вынужден использовать sdk6 из-за API langtools. –