Java学习之多线程的作业

作业1:

使用Thread和Runable接口实现既唱歌又跳舞
package com.openlab.day23.thread;

public class TestTread01 {
    public static void main(String[] args) {
        MyThread mt=new MyThread();
        mt.start();
        dance();
    }
    public static void dance(){
        while(true){
            System.out.println(Thread.currentThread().getName()+"我正在跳舞……");
        }
    }
    public static void sing(){
        while(true){
            System.out.println(Thread.currentThread().getName()+"我正在唱歌……");
        }
    }
}
class MyThread extends Thread{
    

    public MyThread() {
    }

    @Override
    public void run() {
        while(true){
            System.out.println(this.getName()+"我正在唱歌……");
        }
    }
}

作业2

synchronized和Lock的区别(查资料),做成博客

详见:详解synchronized与Lock的区别与使用

作业3

简述什么是线程安全问题,为什么会出现?怎么解决

线程安全问题:
在操作系统中,进程之间的数据是隔离的。但是注意:如果是一个进程里面多个线程,线程之间是共享一个进程的
在Java中,如果使用多个Thread线程启动同一个Runable的线程对象,此时这些线程会共享Runable对象中的属性,就容易出现线程安全问题(非线程安全问题)。

为什么会出现?
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,
就是线程安全的。
或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。

出现线程安全问题是因为在一个进程里面当多个线程对同一个线程对象进行启动,此时就容易出现线程安全问题。

怎么解决?
使用加锁解决,在Java中目前加锁有两种
1、synchronized关键字
2、Lock(1.5JDK)

synchronized关键字的使用
|–synchronized语法块
synchronized(对象){
需要加锁的代码
}
|–synchronized可以修饰方法
锁的范围越小越好

Lock:jdk1.5提供
Lock lock = new ReentrantLock();
————————————————
原文链接:https://blog.csdn.net/weixin_45042315/article/details/107799917

作业4

继承Thread和实现Runable接口的区别?

继承Thread类的子线程类,多个线程对象间是无法共享成员变量的!!!
如果是静态成员,也是共享的!!!!
实现Runable接口都子线程类,多个线程对象间是共享线程类的成员变量的!!!
其实,抽象来说,这并不是Thread类和Runnable接口的区别了,这可以看做是接口和继承的问题。我们弄懂了接口和继承,就不难理解Thread和Runnable。
在刚接触的时候可能会有些迷糊这二者的区别于联系,但是实践和总结过后我们会发现这是两个完全不同的实现多线程,一个是多个线程分别完成自己的任务,一个是多个线程共同完成一个任务。其实,在实现一个任务用多个线程来做也可以用继承Thread类来实现,只是比较麻烦,一般我们用实现Runnable接口来实现。
————————————————
原文链接:https://blog.csdn.net/Body63681/article/details/119530431

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值