Kotlin - 线程 Thread

本文详细介绍了在Java中通过各种方式创建线程(如使用object、Lambda、函数、继承Thread和Runnable接口)、同步机制(synchronized、join、ReentrantLock、@volatile)的实践应用。涵盖了线程启动、并发控制以及守护线程的概念。

一、开启线程方式

1.1 使用 object

object : Thread() {
    override fun run() {
        println("使用object")
    }
}.start()

1.2 使用 Lambda

Thread {
    println("使用lambda")
}.start()

1.3 使用函数

//start:是否立即执行。传参false的话,用返回值手动调用start()
//isDaemon:是否是守护线程,当运行的全是守护线程JVM退出
//contextClassLoader:类加载器,用来加载这个线程的类和资源
thread(start = true, isDaemon = false, contextClassLoader = null, name = "t2", priority = 3) {
    Thread.sleep(1000)
    println("使用函数")
}.start()

1.4 继承 Thread

class T4 : Thread() {
    override fun run() {
        println("继承Thread类")
    }
}

1.5 实现 Runnable

class T5 : Runnable {
    override fun run() {
        println("实现Runnable接口")
    }
}

二、同步

2.1 @synchronized

@Synchronized    //和Java中的synchronized关键字相同。
fun method() { }

2.3 synchronized( )

//为了同步多个并行任务的结果则需要声明n个锁,即需嵌套n个synchronized。
fun method() {
    val lock = "hello"
    Thread {
        synchronized(lock) {}
        synchronized(Unit) {}
    }.start()
}

2.4 join( )

lateinit var str1: String
lateinit var str2: String
fun method() {
    val t1 = thread(start = true) { str1 = "AAA" }
    val t2 = thread(start = true) { str2 = "BBB" }
    t1.join()
    t2.join()
    show(str1, str2)
}
fun show(str1: String, str2: String) = println("${str1}、${str2}")

2.5 ReentrantLock( )

val lock = ReentrantLock()
Thread {
    lock.lock()     //上锁
    s1 = task1()    //耗时操作
    lock.unlock()   //解锁
}.start()

2.6 @volatile

@Volatile    //和Java中的Volatile关键字相同。
private var tag = false

fun start() {
    tag = true
    thread(start = true) {
        var count = 0
        while (tag) {
            Thread.sleep(100)
            count++
            println(count)
        }
    }
}

fun stop() {
    tag = false
}

fun main() {
    thread(start = true) {
        start()
        Thread.sleep(1000)
        stop()
    }
}
在网页开发中,`base.css` 通常是一个基础样式表文件的名称。它本身没有特定的含义,是开发者自定义的一个 CSS 文件名,通常用于存放网站全局的基础样式规则。这些样式规则会被应用到整个网站的多个页面中,以确保整个网站在视觉风格上保持一致。 ### 举例说明: 假设你有一个网站项目,结构如下: ``` project/ │ ├── css/ │ ├── base.css │ ├── layout.css │ └── theme.css ├── index.html └── about.html ``` 在 `index.html` 或其他 HTML 页面中,你可以这样引入 `base.css`: ```html <link rel="stylesheet" href="css/base.css"> ``` ### `base.css` 文件内容可能如下: ```css /* base.css */ /* 设置全局字体和文字颜色 */ body { font-family: Arial, sans-serif; color: #333; line-height: 1.6; margin: 0; padding: 0; } /* 链接样式 */ a { color: #007BFF; text-decoration: none; } a:hover { text-decoration: underline; } /* 段落样式 */ p { margin-bottom: 1rem; } /* 按钮基础样式 */ .btn { display: inline-block; padding: 0.5rem 1rem; border: none; border-radius: 4px; cursor: pointer; font-size: 1rem; } .btn-primary { background-color: #007BFF; color: white; } ``` ### 解释: - `base.css` 提供了网站的基本样式,比如字体、颜色、链接、段落、按钮等通用样式。 - 这些样式可以被多个页面复用,避免重复定义。 - 通常在开发大型网站时,会将样式拆分成多个 CSS 文件,例如 `base.css`(基础样式)、`layout.css`(布局样式)、`theme.css`(主题样式)等,以便于维护和协作。 --- ### 相关问题:
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值