线程解决时间片随机,锁 ,线程转换成安全集合,线程池,IO阻塞

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();
	}
			

}

}

——————————————————————————————————————————————————————————————

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值