zoukankan      html  css  js  c++  java
  • Java基础学习 —— 线程

    线程:

    多线程的好处:解决了在一个进程中同时执行多个任务代码的问题。

    自定义线程的创建方式:

    1.自定一个类继承thread类,重写thread的run方法 吧自定义线程的任务代码写在run方法内,创建thread子类的对象并且调用start()方法启动线程。

    2.自定义一个类实现runnable接口,实现runnable接口中run方法,吧自定义线程的任务代码写在run方法内部,创建runnable实现类的对象 ,创建thread对象并且把runnable实现类的对象作为参数传递,调用thread对象的start方法开启线程。
    线程安全问题出现的根本原因:
    必须存在着两个或者两个以上的线程共享一个资源。
    操作共享资源的代码必须有两句或者有两句以上
    线程安全问题的解决方案:
    同步代码块解决
    synchronized(锁){
    需要被同步的代码
    }
    同步行数解决:
    修饰符 synchronized 函数名(形参列表。。。){
    }

     1 public class demo1 extends Thread{
     2     
     3     public demo1(String name) {
     4         super(name);
     5     }
     6     public void run() {
     7         for (int i = 0; i < 50; i++) {
     8             System.out.println(Thread.currentThread().getName()+":"+i);
     9         }
    10     }
    11     public static void main(String[] args) {
    12         demo1 demo1 = new demo1("sony");
    13         demo1.start();
    14         for (int i = 0; i < 50; i++) {
    15             System.out.println(Thread.currentThread().getName()+":"+i);
    16         }
    17     }
    18 }
    sony:0
    main:0
    sony:1
    main:1
    sony:2
    main:2
    sony:3
    sony:4
    main:3
    sony:5
    main:4
    sony:6
    main:5
    sony:7
    main:6
    sony:8
    sony:9
    sony:10
    sony:11
    sony:12
    sony:13
    sony:14
    sony:15
    sony:16
    sony:17
    sony:18
    sony:19
    sony:20
    sony:21
    sony:22
    sony:23
    sony:24
    main:7
    sony:25
    main:8
    sony:26
    main:9
    sony:27
    main:10
    sony:28
    main:11
    sony:29
    main:12
    sony:30
    main:13
    main:14
    sony:31
    main:15
    sony:32
    main:16
    sony:33
    main:17
    main:18
    sony:34
    main:19
    main:20
    sony:35
    main:21
    sony:36
    sony:37
    sony:38
    main:22
    sony:39
    main:23
    sony:40
    main:24
    main:25
    main:26
    sony:41
    main:27
    sony:42
    main:28
    sony:43
    main:29
    sony:44
    main:30
    sony:45
    main:31
    sony:46
    main:32
    sony:47
    main:33
    sony:48
    main:34
    sony:49
    main:35
    main:36
    main:37
    main:38
    main:39
    main:40
    main:41
    main:42
    main:43
    main:44
    main:45
    main:46
    main:47
    main:48
    main:49
    View Code

    注意事项:
    同步代码块的锁 可以是任意的对象。但是同步锁对象必须是多线程共享的对象,否则锁不住。
    同步函数的锁 是固定的 非静态函数的锁对象是 this对象,静态函数的锁对象时 class对象。
    在同步代码块或同步函数中调用sleep方法是不会释放锁对象的。如果调用的wait方法是会释放锁对象的。

  • 相关阅读:
    2019.6.20刷题统计
    36 线程 队列 守护线程 互斥锁 死锁 可重入锁 信号量
    35 守护进程 互斥锁 IPC 共享内存 的方式 生产者消费者模型
    34 进程 pid ppid 并发与并行,阻塞与非阻塞 join函数 process对象 孤儿进程与僵尸进程
    33 udp 域名 进程
    32 粘包 文件传输
    31 socket客户端. 服务器 异常 语法
    30 网络编程
    29 元类 异常
    26 封装 反射 常用内置函数
  • 原文地址:https://www.cnblogs.com/wy0904/p/7479073.html
Copyright © 2011-2022 走看看