zxf 2023-09-18 17:54:18 +08:00
parent c13c70eed8
commit 0ecb86a2b7
10 changed files with 266 additions and 0 deletions

View File

@ -0,0 +1,20 @@
package com.zxf.web.study.Collection;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ColectionStudy {
public static void main(String[] args) {
List l= new ArrayList();
l.add("123");
l.size();
System.out.println(l.size());
List q= new LinkedList();
q.add("123");
q.size();
}
}

View File

@ -0,0 +1,19 @@
package com.zxf.web.study.Thread;
public class MyThread extends Thread {
public MyThread() {
}
public MyThread(String name) {
super(name);
}
//run方法是每个线程运行过程中都必须执行的方法
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(this.getName() + ":" + "-----------" + i);
}
}
}

View File

@ -0,0 +1,23 @@
package com.zxf.web.study.Thread;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class NumThread implements Callable {
private int sum=0;//
//可以抛出异常
@Override
public Object call() throws Exception {
for(int i = 0;i<=100;i++){
if(i % 2 == 0){
System.out.println(Thread.currentThread().getName()+":"+i);
sum += i;
}
}
return sum;
}
}

View File

@ -0,0 +1,31 @@
package com.zxf.web.study.Thread;
public class StudyThreadOne {
public static void main(String[] args) {
//创建线程
MyThread t01 = new MyThread();
MyThread t02 = new MyThread();
MyThread t03 = new MyThread("线程03");
//开启线程
// t01.run();
// t02.run();
// t03.run();
// 不会启动线程,不会分配新的分支栈。(这种方式就是单线程。)
// start()方法的作用是启动一个分支线程在JVM中开辟一个新的栈空间这段代码任务完成之后瞬间就结束了。
// 这段代码的任务只是为了开启一个新的栈空间只要新的栈空间开出来start()方法就结束了。线程就启动成功了。
// 启动成功的线程会自动调用run方法并且run方法在分支栈的栈底部压栈
// run方法在分支栈的栈底部main方法在主栈的栈底部。run和main是平级的。
t01.start();
t02.start();
t03.start();
//设置线程名(补救的设置线程名的方式)
t01.setName("线程01");
t02.setName("线程02");
//设置主线程名称
Thread.currentThread().setName("主线程");
System.out.println(Thread.currentThread().getName() + ":" );
}
}

View File

@ -0,0 +1,44 @@
package com.zxf.web.study.Thread;
public class StudyThreadTwo {
public static void main(String[] args){
window1 w = new window1();
//虽然有三个线程但是只有一个窗口类实现的Runnable方法由于三个线程共用一个window对象所以自动共用100张票
Thread t1=new Thread(w);
Thread t2=new Thread(w);
Thread t3=new Thread(w);
t1.setName("窗口1");
t2.setName("窗口2");
t3.setName("窗口3");
t1.start();
t2.start();
t3.start();
}
}
class window1 implements Runnable{
private int ticket = 100;
@Override
public void run() {
while(true){
if(ticket>0){
// try {
// sleep(100);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
System.out.println(Thread.currentThread().getName()+"当前售出第"+ticket+"张票");
ticket--;
}else{
break;
}
}
}
}

View File

@ -0,0 +1,4 @@
package com.zxf.web.study.Thread;
public class ThreadModulStudy {
}

View File

@ -0,0 +1,33 @@
package com.zxf.web.study.Thread;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class ThreadNew {
public static void main(String[] args) {
//new一个实现callable接口的对象
NumThread numThread = new NumThread();
//通过futureTask对象的get方法来接收futureTask的值
FutureTask futureTask = new FutureTask(numThread);
Thread t1 = new Thread(futureTask);
Thread t2 = new Thread(futureTask);
t1.setName("线程1");
t1.start();
t2.setName("线程2");
t2.start();
try {
//get返回值即为FutureTask构造器参数callable实现类重写的call的返回值
Object sum = futureTask.get();
System.out.println(Thread.currentThread().getName() + ":" + sum);
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

View File

@ -0,0 +1,25 @@
package com.zxf.web.study.Thread;
public class demo7 {
public static void main(String[] args) {
Thread t = new Thread(()->{
while (true) {
System.out.println("thread--");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
},"一个简简单单的线程");
t.start();//启动线程
System.out.println(t.getId());
System.out.println(t.getState());
System.out.println(t.getPriority());
System.out.println(t.isDaemon());
System.out.println(t.isAlive());
System.out.println(t.isInterrupted());
}
}

View File

@ -0,0 +1,40 @@
package com.zxf.web.study.Thread.pool;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
public class Executors {
/* Executors线线ExecutorService
newFiexedThreadPool(int Threads)线线
newCachedThreadPool()线execute 线线线线 60 使线
newSingleThreadExecutor()线Executor
newScheduledThreadPool(int corePoolSize) 线Timer
便
ExecutorService executor = Executors.newFixedThreadPool(nThreads) ;
线
使 Executors 线
newCachedThreadPoolExecutors线
Executors线Executors.newXXX
*/
// 1. FixedThreadPool
public static ExecutorService newFixedThreadPool(int nThreads){
return new ThreadPoolExecutor(nThreads,nThreads,0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<Runnable>());
}
}

View File

@ -0,0 +1,27 @@
package com.zxf.web.study.Thread.pool;
import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.zxf.web.study.Thread.MyThread;
import java.util.concurrent.*;
public class ExecutorsDemo {
private static ThreadFactory namedThreadFactory = new ThreadFactoryBuilder()
.setNameFormat("demo-pool-%d").build();
private static ExecutorService pool = new ThreadPoolExecutor(5, 200,
0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>(1024), namedThreadFactory, new ThreadPoolExecutor.AbortPolicy());
public static void main(String[] args) {
for (int i = 0; i < Integer.MAX_VALUE; i++) {
pool.execute(new MyThread());
}
}
}