Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说这次进程、线程、多线程和线程安全问题,一次性帮你全解决了[通俗易懂],希望能够帮助你!!!。
public class MyThread extends Thread {
@Override
public void run() {
System.out.println("my thread .....");
}
}
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("my runnable ....");
}
}
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
class MyTask implements Callable<Integer> {
private int upperBounds;
public MyTask(int upperBounds) {
this.upperBounds = upperBounds;
}
@Override
public Integer call() throws Exception {
int sum = 0;
for(int i = 1; i <= upperBounds; i++) {
sum += i;
}
return sum;
}
}
class Test01 {
public static void main(String[] args) throws Exception {
List<Future<Integer>> list = new ArrayList<>();
ExecutorService service = Executors.newFixedThreadPool(10);
for(int i = 0; i < 10; i++) {
list.add(service.submit(new MyTask((int) (Math.random() *
100))));
}
int sum = 0;
for(Future<Integer> future : list) {
// while(!future.isDone()) ;
sum += future.get();
}
System.out.println(sum);
}
}
public void cacheThreadPoolTest() {
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
for (int i = 1; i <= 5; i++) {
final int j = i;
try {
Thread.sleep(j * 1);
} catch (InterruptedException e) {
e.printStackTrace();
}
cachedThreadPool.execute(()->out.println("线程:" + Thread.currentThread().getName() + ",执行:" + j));
}
}
public void fixTheadPoolTest() {
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
for (int i = 0; i < 5; i++) {
final int j = i;
fixedThreadPool.execute(() -> {
out.println("线程:" + Thread.currentThread().getName() + ",执行:" + j);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
});
}
}
public void sceduleThreadPoolTest() {
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
Runnable r1 = () -> out.println("线程:" + Thread.currentThread().getName() + ",执行:3秒后执行此任务");
scheduledThreadPool.schedule(r1, 3, TimeUnit.SECONDS);
Runnable r2 = () -> out.println("线程:" + Thread.currentThread().getName() + ",执行:延迟2秒执行一次后每1秒执行一次");
scheduledThreadPool.scheduleAtFixedRate(r2, 2, 1, TimeUnit.SECONDS);
Runnable r3 = () -> out.println("线程:" + Thread.currentThread().getName() + ",执行:普通任务");
for (int i = 0; i < 3; i++) {
scheduledThreadPool.execute(r3);
}
}
public void singleTheadExecutorTest() {
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
for (int i = 0; i < 5; i++) {
final int j = i;
singleThreadExecutor.execute(() -> out.println("线程:"+Thread.currentThread().getName() + ",执行:" + j));
}
}
Lock lock = new ReentrantLock();
lock.lock();
try{
//可能会出现线程安全的操作
}finally{
//释放锁
lock.unlock();
public synchronized void test01(){
//该方法同一时间只能被一个线程访问
}
public void test02(String str){
System.out.println("111");
synchronized (str) {
//该区域同一时间只能被一个线程访问
}
System.out.println("2222");
}
感谢你看到这里,看完有什么的不懂的可以在评论区问我,觉得文章对你有帮助的话记得给我点个赞,每天都会分享java相关技术文章或行业资讯,欢迎大家关注和转发文章!
上一篇
已是最后文章
下一篇
已是最新文章