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方法是会释放锁对象的。

  • 相关阅读:
    【动态规划】01背包问题
    【Huffman&&贪心】Fence Repair(POJ 3253)
    【STL学习】priority_queue
    【贪心算法】特殊的密码锁(openjudge8469)
    【贪心+二分】疯牛
    用类模板封装链表
    Qt的QString和C++string之间的转换
    Qt模态对话框和非模态对话框
    常见的交换变量的三种方法
    整理的经典面试题及各种库函数的自己实现
  • 原文地址:https://www.cnblogs.com/wy0904/p/7479073.html
Copyright © 2011-2022 走看看