关于线程的几个简单案例

简单说明线程不安全是什么情况:

 package com.zhang.test.thread;
    
    
    public class Test1 implements Runnable{
    	private static  Test1 test1 = new Test1();
	static int i = 0;

	public static void main(String[] args) throws InterruptedException {
		Thread t1 = new Thread(test1);
		Thread t2 = new Thread(test1);
		t1.start();
		t2.start();
		 /**join的意思是使得放弃当前线程的执行,并返回对应的线程,例如下面代码的意思就是:
        程序在main线程中调用t1线程的join方法,则main线程放弃cpu控制权,并返回t1线程继续执行直到线程t1执行完毕
        所以结果是t1线程执行完后,才到主线程执行,相当于在main线程中同步t1线程,t1执行完了,main线程才有执行的机会
        */
		t1.join();   //插队的意思
		t2.join();
		System.out.println(i);
	}
	@Override
	public void run() {
		for(int j = 0;j< 100000;j++)
		{
			i++;
		}
		System.out.println("iiiiiii---------->" + i);
		
		
	}

}

输出结果肯定是小于20万的,很好证明了不安全的现象
在main方法主线程中创建子线程:

public class Test{
	public static void main(String[] args) {
		for (int i = 0; i < 10; i++) {
			Thread t = new Thread(new Runnable() {
				
				@Override
				public void run() {
					System.out.println("我是" + Thread.currentThread().getName());
				}
			});
			t.start();
		}
	}
}

创建线程池:

public class Test{
	public static void main(String[] args) {
		ExecutorService executorService = Executors.newCachedThreadPool();

		for (int i = 0; i < 10; i++) {
			Runnable r = new Runnable() {

				@Override
				public void run() {
					System.out.println("我是" + Thread.currentThread().getName());
				}
			};
			executorService.execute(r);
		}
		executorService.shutdown();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值