JAVA多线程 Thread Runable 守护线程实例
package com.thread.my;
public class ThreadTest extends Thread{
private int ticket = 5;
private String name;
public ThreadTest(String name){
this.name = name;
}
@Override
public void run() {
while(ticket>0){
ticket--;
System.out.println(name+"出售了一张票。剩余"+ticket+"张票。");
}
}
public static void main(String[] args) {
ThreadTest tt1 = new ThreadTest("窗口1");
ThreadTest tt2 = new ThreadTest("窗口2");
ThreadTest tt3 = new ThreadTest("窗口3");
tt1.start();
tt2.start();
tt3.start();
}
}
=======================
package com.thread.my;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
public class RunableTest implements Runnable {
Lock lock = new ReentrantLock();
private int ticket = 2000;
@Override
public void run() {
synchronized (this) {
while(ticket>0){
ticket--;
System.out.println(Thread.currentThread().getName()+"出售了一张票。剩余"+ticket+"张票。");
}
}
}
public static void main(String[] args) {
RunableTest rt = new RunableTest();
Thread t1 = new Thread(rt, "窗口1");
Thread t2 = new Thread(rt, "窗口2");
Thread t3 = new Thread(rt, "窗口3");
t1.start();
t2.start();
t3.start();
}
}
=================
package com.thread.my;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Scanner;
public class DeamonThreadDemo implements Runnable {
@Override
public void run(){
System.out.println("进入守护线程"+Thread.currentThread().getName());
try {
writeToFile();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("退出守护线程"+Thread.currentThread().getName());
}
private void writeToFile() throws IOException, InterruptedException{
File file = new File("D:"+File.separator + "deamon.txt");
OutputStream os = new FileOutputStream(file,true);
int count = 0;
while(count<999){
os.write(("\r\nword"+count).getBytes());
System.out.println("守护线程向文件中写入了word"+count);
count++;
Thread.sleep(1000);
}
}
/**
*
* @param args
*/
public static void main(String[] args) {
System.out.println("进入主线程" + Thread.currentThread().getName());
DeamonThreadDemo dtd = new DeamonThreadDemo();
Thread thread = new Thread(dtd);
thread.setDaemon(true);
thread.start();
Scanner sc = new Scanner(System.in);
sc.next();
System.out.println("退出主线程" + Thread.currentThread().getName());
}
}