跳转至

科特林&安卓

线程优先级

原文:https://www . geesforgeks . org/thread-priority-in-kot Lin-Android/

进程中的每个线程都有一个优先级。它们在 1 到 10 的范围内。在线程调度器的帮助下,线程根据其优先级进行调度。 一个线程可以设置 3 个优先级常量,它们是:

  • 最小优先级等于 1
  • 最大优先级等于 10
  • NORM_PRIORITY 为默认值,等于 5

下面是检查两个线程优先级的代码。

检查线程的当前优先级:

val t1 = Thread(Runnable{
    // Some Activity
})

    val t2
    = Thread(Runnable{
        // Some Activity
    })

        println("${t1.priority} ${t2.priority}")
Output: 5 5

两个线程的输出与相同,一个线程的默认优先级为 5。 给线程分配新的优先级: 下面两个线程被分配不同的优先级。线程 t1 被分配 1,线程 t2 被分配 10。由于线程 t1 优先级更高,所以先启动,其余线程按优先级启动。优先级可以隐式或显式声明。

val t1 = Thread(Runnable{
    // Some Activity
})

    val t2= Thread(Runnable{
        // Some Activity
    })

    t1.priority= 1 
    t2.priority = 10

    println("${t1.priority} ${t2.priority}")
Output : 1 10

同样可以在安卓应用中实现,下面是一个例子。 Android 中的例子: 尝试在 Android 中运行下面的程序,检查代码内声明的两个线程的优先级。当用户点击按钮时,优先级更高的线程启动。

package com.example.gfg

    import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.TextView

    class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?)
    {
        super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)

                val tv = findViewById<TextView>(R.id.tv)
                val btn1= findViewById<Button>(R.id.btn1)

                val t1 = Thread(Runnable{
                tv.text = "t1 had more priority" })

                val t2= Thread(Runnable{
                tv.text = "t2 had more priority" })

                t1.priority= 1 
                t2.priority = 10

               btn1.setOnClickListener{
               when{
                t1.priority < t2.priority -> t1.start() t2.priority < t1.priority -> t2.start() else -> tv.text = 
                 "Both had same priority"
                }
            btn1.isEnabled = false
        }
    }
}

下面的 XML 代码用于布局。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tv"
        android:layout_width="200sp"
        android:layout_height="100sp"
        android:gravity="center"
        android:textColor="@color/colorAccent"
        android:background="@color/colorPrimary"
        android:layout_centerInParent="true"
        android:textSize="30sp"
        />

    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Go"
        android:layout_centerHorizontal="true"
        android:layout_below="@id/tv"
        />

</RelativeLayout>

输出:



回到顶部