多线程是为了提高应用程序的使用率
实现多线程方式一
class Test {
public static void main (String[] args) {
MyThread t1 = new MyThread(“t1”);
MyThread t2 = new MyThread(“t2”);
t1.start();
t2.start();
}
}
class MyThread extends Thread {
public MyThread (String s) {
super( s );
}
public void run() {
for (int i =0; i<10; i++) {
try {
sleep( 1000 );
} catch (Exception e) { }
System.out.print( getName()+" " );
}
}
}
方式二
public class demo implements Runnable{
@Override
public void run() {
String name = Thread.currentThread().getName();
System.out.println(name);
}
}
public class demo2 {
public static void main(String[] args) {
demo demo = new demo();
Thread thread = new Thread(demo);
thread.setName(“fqefr”);
thread.start();
}
}
方式三
public class demo {
public static void main(String[] args) throws ExecutionException, InterruptedException {
demo2 demo2 = new demo2();
FutureTask integerFutureTask = new FutureTask<>(demo2);
Thread thread = new Thread(integerFutureTask);
thread.start();
Integer integer = integerFutureTask.get();
System.out.println(integer);
}
}
import java.util.concurrent.Callable;
public class demo2 implements Callable {
@Override
public Integer call() throws Exception {
System.out.println(“执行了”);
int num=0;
for (int i = 0; i < 100; i++) {
num+=i;
}return num;
}
}
死循环
public class demo {
public static void main(String[] args) {
demo2 d = new demo2(true);
demo2 d2 = new demo2(false);
d.start();
d2.start();
}
}
public class demo2 extends Thread{
boolean flag;
public demo2(boolean flag){
this.flag=flag;
}
Object obja=new Object();
Object objb=new Object();
@Override
public void run() {
if (flag) {
synchronized (obja) {
System.out.println(“tureobja");
synchronized (objb) {
System.out.println("tureobjb”);
}
}
}else {synchronized (objb) {
System.out.println(“falseobjb");
synchronized (obja) {
System.out.println("falseobja”);}
}}}}
案例:三个窗口买票
public class demo3 implements Runnable {
static int piao = 100;
static Object obj = new Object();
@Override
public void run() {
for (int i = piao; piao> 2; piao--) {
synchronized (obj){
try {
Thread.sleep(50);
} catch (Exception e) {
e.printStackTrace();
}
String name = Thread.currentThread().getName();
System.out.println(name + "还剩余" + piao + "票");
}
}
}
}
public class demo4 {
public static void main(String[] args) {
demo3 demo3 = new demo3();
Thread th = new Thread(demo3);
Thread th2 = new Thread(demo3);
Thread th3 = new Thread(demo3);
th.setName(“窗口1”);
th2.setName(“窗口2”);
th3.setName(“窗口3”);
th.start();
th2.start();
th3.start();
}
}
窗口2还剩余100票
窗口2还剩余99票
窗口2还剩余98票
窗口2还剩余97票
窗口2还剩余96票
窗口2还剩余95票
窗口2还剩余94票
窗口2还剩余93票
窗口2还剩余92票
窗口2还剩余91票
窗口2还剩余90票
窗口2还剩余89票
窗口2还剩余88票
窗口1还剩余87票
窗口1还剩余86票
窗口1还剩余85票
窗口1还剩余84票
窗口1还剩余83票
窗口1还剩余82票
窗口1还剩余81票
窗口1还剩余80票
窗口3还剩余79票
窗口3还剩余78票
窗口3还剩余77票
窗口3还剩余76票
窗口3还剩余75票
窗口3还剩余74票
窗口3还剩余73票
窗口3还剩余72票
窗口1还剩余71票
窗口1还剩余70票
窗口1还剩余69票
窗口1还剩余68票
窗口1还剩余67票
窗口1还剩余66票
窗口1还剩余65票
窗口1还剩余64票
窗口1还剩余63票
窗口1还剩余62票
窗口1还剩余61票
窗口1还剩余60票
窗口1还剩余59票
窗口1还剩余58票
窗口1还剩余57票
窗口1还剩余56票
窗口1还剩余55票
窗口1还剩余54票
窗口2还剩余53票
窗口2还剩余52票
窗口1还剩余51票
窗口1还剩余50票
窗口1还剩余49票
窗口1还剩余48票
窗口1还剩余47票
窗口1还剩余46票
窗口1还剩余45票
窗口1还剩余44票
窗口1还剩余43票
窗口1还剩余42票
窗口1还剩余41票
窗口1还剩余40票
窗口1还剩余39票
窗口1还剩余38票
窗口1还剩余37票
窗口3还剩余36票
窗口1还剩余35票
窗口1还剩余34票
窗口1还剩余33票
窗口2还剩余32票
窗口2还剩余31票
窗口2还剩余30票
窗口2还剩余29票
窗口2还剩余28票
窗口2还剩余27票
窗口2还剩余26票
窗口2还剩余25票
窗口1还剩余24票
窗口1还剩余23票
窗口1还剩余22票
窗口1还剩余21票
窗口1还剩余20票
窗口1还剩余19票
窗口1还剩余18票
窗口1还剩余17票
窗口1还剩余16票
窗口1还剩余15票
窗口1还剩余14票
窗口1还剩余13票
窗口1还剩余12票
窗口1还剩余11票
窗口1还剩余10票
窗口1还剩余9票
窗口1还剩余8票
窗口1还剩余7票
窗口3还剩余6票
窗口3还剩余5票
窗口3还剩余4票
窗口3还剩余3票
窗口1还剩余2票
窗口2还剩余1票