Java 多线程的一些知识 和简单代码实现

程序

    存在磁盘中的引用

进程

    运行在内存中的程序

线程

概念

    轻量级的进程

        同一进程下,可有许多的线程,这些线程共享堆内存和方法区

        同一进程下,不同线程有不同的栈内存和程序计数器

作用

    提高进程的执行效率

线程安全

    synchronized  锁机制

        锁对象

        锁方法

        锁代码块    双重锁检查

        加锁效率低

    线程安全类

优先级

    整数1~10    默认为5   

        优先级高的未必比优先级低的执行快,只是执行的概率更大,就可能更快

如何设置  setPriority()

new Thread().setPriority(9)

生命周期

 新建  使用new,Thread或其子类创建完对象后   

 运行

         就绪(Ready)  线程对象执行start()后   会等待cpu分配资源  不确定性,

         运行中    start()后得到cpu资源后在运行状态  或 执行run()

                       注意start()方法能真正实现多线程而 run()不是,执行run()以后程序仍然只有一个主线程。

等待    

        期限等待

                  不会被cpu分配时间,也无需其他程序显示的唤醒,一定时间后由系统自动唤醒,

                    Threan.sleep()

                    设置Timeout参数的Object.wait()

                    设置Timeout参数的Thread.join()  

                    LockSuport.parkNanos()方法

                    LockSuport.parkUntil()方法

        无期限等待

                    未设置Timeout参数的Object.wait()

                    未设置Timeout参数的Thread.join()  

                    LockSuport.parkl()方法

阻塞

        wait(),sleep()睡眠,suspend()挂起,等等某个锁对象,失去资源占用后 处于

结束

        执行完run()方法  或stop()和destroy()强制终止

多线程

继承Thread

    run()    欲实现多线程的部分

实现Runnable

    run()    欲实现多线程的部分

属性Lock. Lock是Java实现并发编程的框架类

    Lock lock = new ReentrantLock()

并行

    程序真正同时运行

并发

    程序表面同时运行,实际上是执行一会这个程序,没执行完又去执行其他程序了,同一时刻只运行着一个程序

附上两个多线程的简单代码实现

三大特性

原子性

由Java内存模型来直接保证原子性变量操作,如read,load,assign,use,store,write

基本数据类型具备原子性(long和duoble 除外)

若需要更大的原子性支持可使用Lock和synchronized关键字

可见性

可见性与JVM内存模型有关,非可见性的变量需线程通过主内存来Save和Load。可见性并不能保证线程安全

有序性

不保证有序性指JVM存在机器级(编译时、汇编语言级)的指令优化,但当多个线程对同一个变量的状态依赖时就不能保证符合逻辑

 补充 volatile关键字的说明见博客https://blog.csdn.net/weixin_42231373/article/details/84643771

单例实体类

public class Singletion {
	private static volatile Singletion st;

	private Singletion() {
	}

	public static Singletion getInstance() {
		if (st == null) {
			synchronized (Singletion.class) {
				if (st == null) {			//双重锁检查,只在第一次new的时候性能低
					st = new Singletion();
				}
			}
		}
		return st;

	}
}

实现runnable接口

public class MyRunnable implements Runnable {

	@Override
	public void run() {
		//run方法中写的就是欲实现多线程的部分
		Singletion st= Singletion.getInstance();
		System.out.println(st);
	}

}

继承Thread类

public class MyThread extends Thread {

	@Override
	public void run() {
		//run方法中写的就是欲实现多线程的部分
		Singletion st= Singletion.getInstance();
		System.out.println(st);
	}
	
}

测试类

public class Test {
	// 多线程实现方式二,常用
	public static void test() {
		for (int i = 0; i < 10; i++) {
			Thread t = new Thread(new MyRunnable());
			t.start();//
		}
	}

	// 多线程实现方式一,基本没人用了
	public static void test2() {
		Thread t = new MyThread();
		// t.run();// 一定不要写,写了实现不了多线程
		for (int i = 0; i < 10; i++) {
			t.start();//
		}
	}

	public static void main(String[] args) {
		test();
	}

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值