package java_13;
public class ThreadDemo01 {
在线程里面调用方法 ,方法也属于同一个线程。 输出结果为Thread-0 is running
Thread-0 is running
public static void main(String[] args) {
Thread t = new Thread() {
public void run() {
dosome();
System.out.println(this.getName() + " is running");
}
};
t.start();
}
public static void dosome() {
System.out.println(Thread.currentThread().getName()+" is running");
}
}
——————————————————————————————————————————————————————————————
package java_13;
public class ThreadDemo02 {-------------------------Object o = new Object(); ----------- o.wait()--------- o.notify()
public static void main(String[] args) {-----------------使用两个线程,加载->显示->下载图片 线程一(图片加载,下载)
线程二(显示)
Object o = new Object();
//load线程一
Thread load = new Thread() {
public void run() {
// synchronized(o){
for(int i=0;i<=100;i++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(“加载了”+i+"%");
}
System.out.println(“加载完成”);
//唤醒下面线程的wait
synchronized(o) {
o.notify();
o.notifyAll();
}
// }
System.out.println(“开始下载图片”);
for(int j=0;j<=100;j++) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(“下载了”+j+" %");
}
System.out.println(“下载完成”);
}
};
//done线程二
Thread done = new Thread() {
public void run() {
synchronized(o) {
try {
o.wait();//共享的对象 锁住 ,wait 可以让这个线程之后执行
//wait()方法是释放锁的 不然上面的o.notify进不来
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("显示完成");
}
};
load.start();
done.start();
}
}
————————————————————————————————————————————————————————
package java_13;
public class ThreadDemo03 {------------------------一个桌子,两个人 拿20 个豆子 。归还时间片随机 代码有点问题
public static void main(String[] args) {
Table T = new Table();
Thread t = new Thread() {
public void run() {
int sum1 = 0;
while(T.bean!=0) {
T.getbean();
sum1++;
Thread.yield();
}
System.out.println("我拿了"+sum1+"个豆子");
}
};
Thread t2 = new Thread() {
public void run() {
int sum2 = 0;
while(T.bean!=0) {
T.getbean();
sum2++;
Thread.yield();
}
System.out.println("你拿了"+sum2+"个豆子");
}
};
t.start();
t2.start();
}
}
class Table{
int bean = 20;
public int getbean() {
// if(bean==0) {
// throw new RuntimeException(“豆子吃没了”);
// }
return bean–;
}
}
————————————————————————————————————————————————————————————
package java_13;//锁用法
public class ThreadDemo04 {
public static void main(String[] args) {---------------------------------锁的用法
Market m = new Market();
Thread jack = new Thread() {
public void run() {
m.shop("jack");
}
};
Thread rose = new Thread() {
public void run() {
m.shop("rose");
}
};
jack.start();
rose.start();
}
}
class Market{
public void shop(String name ) {
System.out.println(name + “:挑衣服”);
synchronized(this){------------------------------------{ 锁代码块(this)
System.out.println(name + “:试衣服”);
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(name+“试完衣服了!”);
}---------------------------------------------------------锁 }
System.out.println(name+“结账买衣服!”);
}
}
—————————————————————————————————————————————————————————————
package java_13;//-----------------------------------------------------把它变成了一个线程安全的集合
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ThreadDemo05 {
public static void main(String[] args) {
⭐️ List<Integer> list = new ArrayList<Integer>();
⭐️Collections.synchronizedList(list);// 把它变成了一个线程安全的集合
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
for(int i=0;i<10;i++) {
list.add(i);
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
for(int i=0;i<10;i++) {
list.add(i);
}
}
});
t1.start();
t2.start();
System.out.println(list);
}
}
—————————————————————————————————————————————————————————————
package java_13;//线程池
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadDemo06 {-----------------------------------------------线程池
public static void main(String[] args) {
// ExecutorService pool = Executors.newCachedThreadPool();//匹配线程池
ExecutorService pool = Executors.newFixedThreadPool(3);//分配线程池
for(int i =0;i<10;i++) {
//将任务交给线程池:随机指派一个线程对象来执行
//Future submit (Callable/Runnable)
pool.execute(new Runnable() {
public void run() {
for(int i=0;i<10;i++) {
System.out.println(Thread.currentThread().getName()+" : "+i);
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
}
pool.shutdown();
}
}
——————————————————————————————————————————————————————————————
package java_13;//IO阻塞
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ThreadDemo07 {---------------------------------------IO阻塞
public static void main(String[] args) {
//控制台读到程序内存,输入 System.in
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
try {
String str = br.readLine();
System.out.println(str);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
——————————————————————————————————————————————————————————————