接口的回调
1.
public interface ReadFileInter {
public abstract void readFile(String string);
}
public class Read {
public static void printFile(ReadFileInter inter) {
new Thread(new Runnable() {
@Override
public void run() {
StringBuilder sb = new StringBuilder();
try {
FileReader fr = new FileReader("src/com/3g/hd/Read.java");
BufferedReader br = new BufferedReader(fr);
String string = "";
while ((string = br.readLine()) != null) {
sb = sb.append(string + "\n");
}
inter.readFile(sb.toString());
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();;
}
}
public static void main(String[] args) {
System.out.println("主线程实现逻辑一...........");
Read.printFile(new ReadFileInter() {
@Override
public void readFile(String string) {
System.out.println(string);
}
});
System.out.println("主线程实现逻辑二...........");
}
volatile关键字
2.volatile 关键字 可以把线程中的值 修改后 立即同步出去(更新)
public static void main(String[] args) {
VolRunnable runnable = new VolRunnable();
Thread t1 = new Thread(runnable);
t1.start();
while (!runnable.isOver) {
}
System.out.println("主线程结束了");
}
}
class VolRunnable implements Runnable{
public volatile boolean isOver = false;
int num = 0;
@Override
public void run() {
while (!isOver) {
num++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName());
if (num == 5) {
isOver = true;
}
}
}
}
join()方法
3.最后通过一个例子介绍一下Thread中的join()方法
public static void main(String[] args) {
JRunnable runnable = new JRunnable();
Thread t1 = new Thread(runnable);
t1.start();
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < 20; i++) {
System.out.println(Thread.currentThread().getName() + i);
}
System.out.println("main is over");
}
}
class JRunnable implements Runnable{
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(Thread.currentThread().getName() + i);
}
}
}