package com.ruigege.threadFoundation1; public class MyThreadExtendsType extends Thread { @Override public void run() { System.out.println("这是一个继承Thread类的多线程表示方法"); } }
package com.ruigege.threadFoundation1; public class MyThreadImplementsRunnable implements Runnable{ @Override public void run() { System.out.println("这是一个实现Runable接口的多线程"); } }
package com.ruigege.threadFoundation1; public class MultiBuildThreadTest { public static void main(String[] args) { //使用继承Thread的类的方式来进行多线程建立 MyThreadExtendsType thread1 = new MyThreadExtendsType(); thread1.start(); //使用实现Runnable接口的方式进行多线程建立 Thread thread2 = new Thread(new MyThreadImplementsRunnable()); thread2.start(); } }
package com.ruigege.threadFoundation1; import java.util.concurrent.Callable; public class MyThreadImplementsCallable implements Callable<String> { @Override public String call() throws Exception{ System.out.println("使用FutureTask的方式来行建立多线程"); return "建立好了"; } }
package com.ruigege.threadFoundation1; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; public class MultiBuildThreadTest { public static void main(String[] args) throws InterruptedException, ExecutionException{ //使用Callable和FutureTask来建立多线程 FutureTask<String> futurnTask = new FutureTask<>(new MyThreadImplementsCallable()); Thread thread3 = new Thread(futurnTask); thread3.start(); System.out.println(futurnTask.get()); } }
执行native方法,pc计数器是undefined地址;执行Java代码的时候才是原定义java
synchronized(共享变量){ }
synchronzied void add (int a,int b){ a + b; }
synchronize(obj){ while(条件不知足){ obj.wait(); } }
https://github.com/ruigege66/ConcurrentJava