Þráður (tölvunarfræði)

**Þráður** er, í tölvunarfræði, íslensk þýðing á orðinu *thread* á ensku sem er stytting á *thread of execution*. Þræðir eru leið fyrir forrit til þess að skipta niður vinnslu sinni í mörg minni verkefni, leysa þau öll „samtímis“ og spara með því tíma og/eða örgjörvavinnslu.

Flestar PC-tölvur í dag hafa reyndar bara einn örgjörva svo þráðavinnsla þykist bara keyra mörg forrit á sama tíma, vinnslutíma örgjörvans er þess í stað skipt niður í smærri einingar. Þessi skipting er útfærð með verkröðun (*scheduling*) þar sem örgjörvi skiptir (*context switch*) milli þráða. Þessi skipti gerast svo hratt að notanda finnst eins og öll þau forrit sem hann er að nota keyri á sama tíma. Í raun og veru skiptir örgjörvi svo ört á milli þráða að notandi tekur ekki eftir því.

## Einfalt java forrit sem notar þráðavinnslu
Þessi klasi býr til þráðinn „EinfaldurThradur“ þegar kallað er í hann úr keyrsluklasa hér að neðan.

```
public class EinfaldurThradur extends Thread
{
    public EinfaldurThradur(String strengur)
    {
        super(strengur);
    }
    public void run()
    {
        for (int i = 1; i < 10; i++) {
            System.out.println("Kast númer " + i + " " + getName());
            try
            {
                sleep((int)(Math.random() * 500));
            }
            catch (InterruptedException e)
            {}
        }
        System.out.println("Upp kom: " + getName());
    }
}
```

Þessi klasi býr til þráðinn „EinfaldurThradur“, fyrst með nafninu „Króna“ síðan með nafninu „Skjaldarmerki“.

```
public class EinfaldurThradurKeyrsla
{
    public static void main (String[] args)
    {
        new EinfaldurThradur("Króna").start();
        new EinfaldurThradur("Skjaldarmerki").start();
    }
}
```

Þetta er útkoman og eins og sést þá skiptast þræðirnir „Króna“ og „Skjaldarmerki“ á að skrifast út.

```
Kast númer 1 Króna
Kast númer 1 Skjaldarmerki
Kast númer 2 Króna
Kast númer 3 Króna
Kast númer 2 Skjaldarmerki
Kast númer 4 Króna
Kast númer 3 Skjaldarmerki
Kast númer 5 Króna
Kast númer 4 Skjaldarmerki
Kast númer 6 Króna
Kast númer 5 Skjaldarmerki
Kast númer 7 Króna
Kast númer 6 Skjaldarmerki
Kast númer 7 Skjaldarmerki
Kast númer 8 Króna
Kast númer 9 Króna
Kast númer 8 Skjaldarmerki
Upp kom: Króna
Kast númer 9 Skjaldarmerki
Upp kom: Skjaldarmerki
```

Hægt er að breyta forritinu og bæta við þráðum á einfaldan hátt. Hér er eins og upp sé kastað tening í stað penings en þá eru búnir til sex þræðir í stað þeirra tveggja sem fyrra dæmið bjó til.

```
public class EinfaldurThradurKeyrsla2
{
    public static void main(String[] args)
    {
        new EinfaldurThradur("Ás").start();
        new EinfaldurThradur("Tvistur").start();
        new EinfaldurThradur("Þristur").start();
        new EinfaldurThradur("Fjarki").start();
        new EinfaldurThradur("Fimma").start();
        new EinfaldurThradur("Sexa").start();
    }
}
```

Hér er útkoman og vinnslan er alveg eins. Eini munurinn er að fleiri þræðir verða til.

```
Kast númer 1 Ás
Kast númer 1 Tvistur
Kast númer 1 Þristur
Kast númer 1 Fjarki
Kast númer 1 Fimma
Kast númer 1 Sexa
Kast númer 2 Sexa
Kast númer 2 Fjarki
Kast númer 2 Tvistur
Kast númer 2 Þristur
Kast númer 2 Ás
Kast númer 3 Þristur
Kast númer 3 Sexa
Kast númer 4 Þristur
Kast númer 2 Fimma
Kast númer 3 Fjarki
Kast númer 4 Sexa
Kast númer 3 Fimma
Kast númer 3 Tvistur
Kast númer 3 Ás
Kast númer 4 Ás
Kast númer 5 Þristur
Kast númer 5 Sexa
Kast númer 4 Fimma
Kast númer 4 Fjarki
Kast númer 5 Ás
Kast númer 5 Fimma
Kast númer 4 Tvistur
Kast númer 6 Þristur
Kast númer 5 Tvistur
Kast númer 6 Ás
Kast númer 6 Tvistur
Kast númer 6 Fimma
Kast númer 5 Fjarki
Kast númer 6 Sexa
Kast númer 7 Ás
Kast númer 7 Fimma
Kast númer 7 Þristur
Kast númer 7 Tvistur
Kast númer 7 Sexa
Kast númer 8 Ás
Kast númer 8 Fimma
Kast númer 6 Fjarki
Kast númer 8 Tvistur
Kast númer 7 Fjarki
Kast númer 9 Ás
Kast númer 8 Þristur
Kast númer 9 Fimma
Kast númer 8 Fjarki
Kast númer 9 Tvistur
Kast númer 9 Þristur
Kast númer 8 Sexa
Upp kom: Tvistur
Kast númer 9 Sexa
Upp kom: Ás
Kast númer 9 Fjarki
Upp kom: Fimma
Upp kom: Þristur
Upp kom: Sexa
Upp kom: Fjarki
```


## Heimildir
* 
* 
*