多线程方法(只有代码)

本文通过实例展示了Java中实现多线程的方式,包括通过实现Runnable接口和设置线程优先级。同时,讨论了线程间通信,使用Thread.join()方法确保线程按顺序执行,并演示了synchronized关键字在银行存款取款场景中的应用,实现互斥访问以保证数据一致性。
摘要由CSDN通过智能技术生成
//测试类
package test20220512;
/*
 * 实现Runnable接口实现多线程,适合处理共享数据
 */
public class myThreadJiekou implements Runnable {
	private int bao=10;
	public void run() {
		for(int i=0;i<10;i++) {
			if(bao>0)
			System.out.println(Thread.currentThread().getName()+"捡了第"+bao--+"宝贝");
			}
		try{
			Thread.sleep(1000);
		}catch (Exception e) {
			System.out.println();
		}
	}

}
//调用类
package test20220512;

import java.io.InterruptedIOException;

public class ceshijiekou {

	public static void main(String[] args) {
		myThreadJiekou p=new myThreadJiekou();
		Thread t=new Thread(p,"张");
		t.setPriority(Thread.NORM_PRIORITY);//设置优先级
		Thread t1=new Thread(p,"黎");
		t1.setPriority(Thread.NORM_PRIORITY+1);
		Thread t2=new Thread(p,"刘");
		t2.setPriority(Thread.NORM_PRIORITY+2);
		Thread t3=new Thread(p,"郭");
		t3.setPriority(Thread.NORM_PRIORITY-1);
		t.start();
		t1.start();
		t2.start();
		t3.start();
		System.out.println(Thread.currentThread().getName()+"执行");
		try {  //加入main县城,等子线程执行完,在执行主线程
			t.join();
			t1.join();
			t2.join();
			t3.join();
		}catch(InterruptedException e) {
			e.printStackTrace();
		}finally {
		System.out.println("结束");
		}
	}
}

主线程--》子线程传递信息,把要传的信息作为线程的属性

package test20220518;

import java.util.Scanner;

/*
 * 主线程--》子线程传递信息,把要传的信息作为线程的属性
 * 子线程--》主线程传递信息,把要传的信息作为线程的属性
 */

public class myrunnable implements Runnable {
	private int n;
	private int sum;
	private String name;
	
	public myrunnable(int n) {
		this.n=n;
	}
	
	public myrunnable() {
		n=100;
	}
	
	public void set_n(int n) {
		this.n=n;
	}
	
	public int get_sum(int sum) {
		return sum;
	}
	
	public void run() {//求0~n内的偶数和
		for(int i=0;i<=n;i+=2) {
			sum+=i;
		}
		System.out.println(Thread.currentThread().getName()+":"+sum);
	}
	
}
package test20220518;

public class myrunnables {

	public static void main(String[] args) {
		myrunnable m=new myrunnable();//主线程把信息传给子线程		
		Thread t=new Thread(m,"1");
		t.start();
		
		
		
		//延时
		try {
		Thread.sleep(1000);
		}catch (Exception e) {
			System.out.println("出错");
		}
		//在执行
		Thread t1=new Thread(m,"2");
		t1.start();
		
		
		
		//延时
		try {
			Thread.sleep(1000);
		}catch (Exception e) {
			System.out.println("出错了");
		}
		//在执行
		myrunnable m2=new myrunnable();//主线程把信息传给子线程
		Thread t2=new Thread(m2,"3");
		m2.set_n(1000000);//调用
		t2.start();
		
		
		
		
		try {
			t.join();
			t1.join();
			t2.join();
		}catch (Exception e) {
			// TODO: handle exception
		}
		
		
		System.out.println(Thread.currentThread().getName()+":"+m2.get_sum(1000));
	}
}

、、、、、、、、第三种、、、、、、、、、、、、、、、

package enterprise;

public class bank {
private int money=0;
/*
 * synchronized:互斥操作(一个进完成了,才能进行下一个进程)
 */

public void save(int money) {  //方法头部加上synchronized
	int temp=this.money;
	temp+=money;
	this.money=temp;
	System.out.println(Thread.currentThread().getName()+":向卡存钱"+money+",卡内金额:"+this.money);
}
public void save1(int money) {  //方法头部加上synchronized
	int temp=this.money;
	temp-=money;
	this.money=temp;
	System.out.println(Thread.currentThread().getName()+":向卡拿钱"+money+",卡内金额:"+this.money);
}
}
package enterprise;

public class cunqian implements Runnable {
	
	private bank bk;
	public cunqian(bank bk)
	{
		this.bk=bk;
	}
	public void run() {
		//synchronized (this) {
			for(int i=0;i<1;i++) {
				bk.save(200);
				bk.save(300);
				bk.save1(150);
				}
			//}
		}
}
package enterprise;

public class test {

	public static void main(String[] args) {
		bank bk=new bank();
		cunqian s=new cunqian(bk);
		Thread m=new Thread(s,"爸爸");
		m.start();
		
		bank bk1=new bank();
		cunqian s1=new cunqian(bk1);
		Thread m1=new Thread(s1,"妈妈");
		m1.start();
		
		bank bk2=new bank();
		cunqian s2=new cunqian(bk2);
		Thread m2=new Thread(s2,"姐姐");
		m2.start();
		
		try {
			m.join();
			m1.join();
			m2.join();
		}catch (Exception e) {
		}
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值