1.Thread实现:
import java.util.Date;
import java.text.SimpleDateFormat;
public class MyThread extends Thread{
@Override
public void run(){
SimpleDateFormat strf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
String d = strf.format(new Date());// new Date()为获取当前系统时间
System.out.println(d+" "+Thread.currentThread().getName());
}
public static void main(String[] args) {
// MyThread myThread = new MyThread();
for (int i = 0; i < 10; i++) {
new MyThread().start();
}
}
}
2020-01-23 21:15:54 Thread-1
2020-01-23 21:15:54 Thread-8
2020-01-23 21:15:54 Thread-7
2020-01-23 21:15:54 Thread-5
2020-01-23 21:15:54 Thread-4
2020-01-23 21:15:54 Thread-3
2020-01-23 21:15:54 Thread-0
2020-01-23 21:15:54 Thread-2
2020-01-23 21:15:54 Thread-6
2020-01-23 21:15:54 Thread-9
2.Runnable :
class MyRunnable implements Runnable {
int i =0;
@Override
public void run(){
System.out.println(Thread.currentThread().getName()+" "+ i++);
}
public static void main(String[] args) {
Runnable implRunnable = new MyRunnable();
// Thread thread = new Thread(implRunnable);
for (int i = 1; i <5 ; i++) {
// new Thread(implRunnable).start(); // int i全局线程操作共享
new Thread(new MyRunnable()).start(); // int i 变量线程操作独立,
}
}
}
3. Callable:
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class MyCallable implements Callable<Object> {
@Override
public Object call() throws Exception{
int result =0 ;
for (int j = 0; j <8 ; j++) {
result +=j;
}
System.out.println(Thread.currentThread().getName());
return result;
}
public static void main(String[] args) throws InterruptedException, ExecutionException {
for (int i = 0; i <5 ; i++) {
Callable<Object> callable = new MyCallable() ;
FutureTask<Object> futureTask = new FutureTask<Object>(callable);
new Thread(futureTask).start();
System.out.println(futureTask.get());
}
}
}
Thread-0
28
Thread-1
28
Thread-2
28
Thread-3
28
Thread-4
28
4.ThreadPool使用同步原语,重入锁,同步代码块,代码类,或者对象,对基本数据类型无效:
import java.util.concurrent.locks.ReentrantLock;
public class SynchronizedTest implements Runnable {
private int i =10;
// synchronized mean block one thread opt some var util other th have fish some operation ;
@Override
public void run() {
//或者同步代码块 Integer Object ,int是基本数据类型,不是object;
//synchronized(SychronizeTest.class) {
ReentrantLock RLock = new ReentrantLock();
RLock.lock();
if (i >= 1) {
try {
Thread.sleep(100);
i--;
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + " " + i);
} else {
System.out.println("库存不足");
}
RLock.unlock();
//}
}
public static void main(String[] args) throws Exception{
Runnable runnable = new SynchronizedTest();
for (int i = 0; i < 20; i++) {
new Thread(runnable).start();
}
Thread.sleep(3000);
}
}